java+js实现展示本地文件夹下的所有图片demo

java+js实现展示本地文件夹下的所有图片demo

最近项目遇到需要实现前端通过一个按钮点击事件,弹窗浏览本地文件夹下的所有图片:

思路:

- 获取到所需展示图片的本地文件夹内所有图片的文件绝对路径名称(路径+图片名称.格式名称)

- 由于图片过大,对图片进行按比例压缩再展示

- 在前端展示图片

- (前端各式各样的展示……)


第一步:获取本地文件夹中的所有图片路径

java代码:

    package com.giscafer.common;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 文件预览辅助类
 * @author lhb
 *
 */
@Controller
public class FileBrowseUtil {
    /**
     * 通过ajax请求获取传入的文件路径里边的文件fileList数组
     * @param req
     * @param resp
     * @param params 文件夹路径参数
     * @return
     * @throws ServletException
     * @throws IOException
     * @throws MalformedURLException
     */
    @RequestMapping("/getFileList.do")
    @ResponseBody
    protected ArrayList<String> CalculateGeoServlet(HttpServletRequest req,
            HttpServletResponse resp,String params) throws ServletException, IOException,
            MalformedURLException {
        ArrayList<String> fileList=new ArrayList<String>();
        fileList=getFiles(params);
        return fileList;
    }
    /**
     * 通过递归得到某一路径下所有的目录及其文件
     * @param filePath 文件路径
     * @return
     */
    public static ArrayList<String> getFiles(String filePath) {
        ArrayList<String> fileList = new ArrayList<String>();
        File root = new File(filePath);
        File[] files = root.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                /*
                 * 递归调用
                 */
                getFiles(file.getAbsolutePath());
                fileList.add(file.getAbsolutePath());
            } else {
                String picPathStr = file.getAbsolutePath();
//              String picPathStr = file.getAbsolutePath().replaceAll("\\\\","//");
                fileList.add(picPathStr);
            }
        }
        /*for(String str:fileList){
            System.out.println(str);
        }*/
        return fileList;
    }
}

可以先调用测试输出结果如图

String filePath = “C://Users//giscafer//Pictures//大白”;

getFiles(filePath )

第二步 前端ajax调用请求获取图片路径数组

/**
 *获取图片文件数组
 */
function common_getPicFileList() {
    var params = "C://Users//giscafer//Pictures//大白";
    $.ajax({
        //此处使用的是自己封装的JAVA类
        url: Config.hostUrl + "/getFileList.do",
        type: "POST",
        data: {params: params},//图片文件夹路径作为参数传入java类
        success: function (data) {
            if (!data.length) {
                alert("您还没有截图,无法查看图片!");
                return;
            } else {
            //获取到的图片数组处理逻辑方法
                loadPicFormDB(data);
            }

        },
        error: function (e) {
            console.log(e);
            console.log("获取文件list数组失败,请检查接口服务");
        }
    });
}


结束以上两个步骤就可以完成浏览本地图片的方法了。剩下的就是loadPicFormDB(data);方法,这个根据你们需要进行展示,网上也有很多相册类型的现成的代码,直接拿来用改掉图片地址即可;



以下是本人的

/**
 * 加载图片,将图片拼成html代码
 * @param SJ_CODE 事件编号
 */
function loadPicFormDB(data) {
    var pichtml = "";
    for (var i = 0; i < data.length; i++) {
        var src =data[i];

        var html1 = ‘<li><a  href="file:///‘ + src + ‘" rel="lightbox" title="‘ + data[i] + ‘" target="_blank">‘
            + ‘<img  src="‘ + src + ‘"></a><span>‘ + data[i] + ‘</span></li>‘;

        pichtml += html1;
        //scrollPic();
    }
    ;
    showPicDetail(pichtml);//展示图片(此代码省略,直接给个div或者弹窗就可以了)

}

上边使用到的AutoResizeImage方法是一个图片压缩方法,压缩原理:

1. 按传入的maxWidth和maxHeight的大小进行图片压缩

/**
 * 按比例缩小图片
 * @param maxWidth
 * @param maxHeight
 * @param objImg
 * @constructor
 */
function AutoResizeImage(maxWidth, maxHeight, objImg) {
    var img = new Image();
    img.src = objImg.src;
    var hRatio;
    var wRatio;
    var Ratio = 1;
    var w = img.width;
    var h = img.height;
    wRatio = maxWidth / w;
    hRatio = maxHeight / h;
    if (maxWidth == 0 && maxHeight == 0) {
        Ratio = 1;
    } else if (maxWidth == 0) { //
        if (hRatio < 1)
            Ratio = hRatio;
    } else if (maxHeight == 0) {
        if (wRatio < 1)
            Ratio = wRatio;
    } else if (wRatio < 1 || hRatio < 1) {
        Ratio = (wRatio <= hRatio ? wRatio : hRatio);
    }
    if (Ratio < 1) {
        w = w * Ratio;
        h = h * Ratio;
    }
    objImg.height = h;
    objImg.width = w;
}

效果:



—–The End—–


时间: 2024-10-04 11:29:54

java+js实现展示本地文件夹下的所有图片demo的相关文章

遍历指定文件夹下的所有图片,并复制到指定目录下

import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; public class Copy { /** * 遍历文件夹下的所有图片文件,并复制到指定文件夹下 */ static String srcfile = "E:/I

matlab 把一个文件夹下的所有图片(可以包含在子文件夹下)考到指定文件夹下

clc;clear all; maindir = 'C:\Users\wang\Desktop\iLIDS-VID\i-LIDS-VID\images\cam2';subdir = dir( maindir ); % 先确定子文件夹 for i = 1 : length( subdir ) if( isequal( subdir( i ).name, '.' ) || ... isequal( subdir( i ).name, '..' ) || ... ~subdir( i ).isdir

使用JAVA实现比较两个文件夹下的文件新增和修改情况,并复制到新的目录(实现增量更新项目)

- 0x00 前言 之前工作的时候,经常会有客户提交BUG或者新增一个功能等需求.于是我就会在我本地修改代码,然后再打包替换客户的项目.比较麻烦的是,每次更新都需要去SVN看看都改了哪些文件,新增了哪些文件,一个一个去找,然后打包,给客户更新,有些时候一不小心就漏了或者搞错了,非常的烦.其实我一直都想做的事情就是,写一个程序,让程序去实现对比新旧两个项目,然后把新的项目多出来的文件或者变更过的文件复制出来,这样就能省去我好多工作,主要是不用人工一个个的去比对.. 太烦了. - 0x01 思路 1

java web项目中classes文件夹下的class和WEB-INF/lib中jar里的class文件加载顺序

如果是发布到weblogic的话,可以在WebContent\WEB-INF\weblogic.xml里面配置.参考配置如下:<?xml version="1.0" encoding="UTF-8"?><weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc

java按时间顺序读取文件夹下的所有文件

/**     * Getting files from Folder(Time Sorting by Modify time)     * @param path     * @return     */    private List<File> getFileSort(String path) {         List<File> list = getFiles(path, new ArrayList<File>());         if (list !=

使用Thumbnails对一个文件夹下的所有图片进行压缩处理

public static void compressPic(){ try { Thumbnails.of(new File("/home/y/my_temp/ydbg-xy-pic").listFiles()) .size(94, 100) .outputFormat("jpg") .toFiles(Rename.PREFIX_DOT_THUMBNAIL); } catch (IOException ex) { Logger.getLogger(Test.clas

Linux统计某文件夹下文件、文件夹的个数

统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件的个数,包括子文件夹里的 ls -lR|grep "^-"|wc -l 如统计/home/han目录(包含子目录)下的所有js文件则: ls -lR /home/han|grep js|wc -l 或 ls -l "/home/han"|grep "js&qu

删除某个文件夹下的所有文件

//删除本地文件夹下保存的文件 NSFileManager *fileManager = [NSFileManager defaultManager];                     NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];                     NSString *dicrector

nodejs 获取文件夹中的文件和获取文件夹中的所有图片

//获取项目工程里的图片 var fs = require('fs');//引用文件系统模块 var image = require("imageinfo"); //引用imageinfo模块 function readFileList(path, filesList) { var files = fs.readdirSync(path); files.forEach(function (itm, index) { var stat = fs.statSync(path + itm);