图片的批量上传结合springmvc

// 用户头像上传


@RequestMapping(value = "/admin/addUserImage", method = RequestMethod.POST)
public void testUpload(MultipartHttpServletRequest request,
HttpServletResponse response) throws IOException {
/*
* MultipartHttpServletRequest: 继承于HttpServletRequest以及MultipartRequest.
* 其中MultipartRequest中定义了相关的访问操作. MultipartHttpServletRequest重写
* 了HttpServletRequest中的方法, 并进行了扩展. 如果以HttpServletRequest来接收参 数,
* 则需要先将其转为MultipartHttpServletRequest类型 MultipartHttpServletRequest
* request = (MultipartHttpServletRequest) HttpServletRequest;
*/


/*
* 再说回刚才的form, 假设我们在单个文件选框中上传了文件1, 多个文件选框中上传了文件2, 3, 4. 那么对于后台接收到的,
* 可以这么理解, 就是一个Map的形式(实际上它后台真的是以Map来存储的). 这个Map的Key是什么呢?
* 就是上面<input>标签中的name=""属性. Value则是我们刚才上传的 文件,
* 通过下面的示例可以看出每一个Value就是一个包含对应文件集合的List

* 传到后台接收到的Map就是这样: fileTest: 文件1 fileList: 文件2, 文件3, 文件4

* 虽然从方法名的表面意义来看是得到文件名, 但实际上这个文件名跟上传的文件本身并没有什么关系.
* 刚才说了这个Map的Key就是<input>标签中的name=""属性, 所以得到的也就是这个属性的值
*/
Iterator<String> fileNames = request.getFileNames();


while (fileNames.hasNext()) {


// 把fileNames集合中的值打出来
String fileName = fileNames.next();
System.out.println("fileName: " + fileName);


/*
* request.getFiles(fileName)方法即通过fileName这个Key, 得到对应的文件 集合列表.
* 只是在这个Map中, 文件被包装成MultipartFile类型
*/
List<MultipartFile> fileList = request.getFiles(fileName);


if (fileList.size() > 0) {


// 遍历文件列表
Iterator<MultipartFile> fileIte = fileList.iterator();


while (fileIte.hasNext()) {


// 获得每一个文件
MultipartFile multipartFile = fileIte.next();


// 获得原文件名
String originalFilename = multipartFile
.getOriginalFilename();
System.out.println("originalFilename: " + originalFilename);
// 优先判断 有没有这个用户
String[] logName = originalFilename.split("\\.");
List list = jdbcTemplate.queryForList(
"SELECT * FROM core_user where LOGIN_NAME=?",
new Object[] { logName[0] });
if (list != null && !list.contains(null) && !list.isEmpty()) {
// 设置保存路径.
String path = request.getSession().getServletContext()
.getRealPath("/")
+ "userImage";


// 检查该路径对应的目录是否存在. 如果不存在则创建目录
File dir = new File(path);
if (!dir.exists()) {
dir.mkdirs();
}


String filePath = request.getSession()
.getServletContext().getRealPath("/")
+ "course_base\\userHeadThumb\\"
+ originalFilename;
System.out.println("filePath: " + filePath);


FileUtil.deleteFile(request.getSession()
.getServletContext().getRealPath("/")
+ "course_base\\userHeadThumb\\",
originalFilename);
// 保存文件
File dest = new File(filePath);
if (!(dest.exists())) {
/*
* MultipartFile提供了void transferTo(File dest)方法,
* 将获取到的文件以File形式传输至指定路径.
*/
multipartFile.transferTo(dest);


/*
* 如果需对文件进行其他操作, MultipartFile也提供了 InputStream
* getInputStream()方法获取文件的输入流

* 例如下面的语句即为通过 org.apache.commons.io.FileUtils提供的
* void copyInputStreamToFile(InputStream source,
* File destination) 方法, 获取输入流后将其保存至指定路径
*/
// FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),
// dest);
}
String photo = "userHeadThumb/" + originalFilename;
jdbcTemplate
.update("update core_user set photo=? where LOGIN_NAME=?",
new Object[] { photo, logName[0] });


System.out
.println("--------------------添加成功-------------------------------");
}
// MultipartFile也提供了其他一些方法, 用来获取文件的部分属性


// 获取文件contentType
String contentType = multipartFile.getContentType();
System.out.println("contentType: " + contentType);


/*
* 获取name 其实这个name跟上面提到的getFileName值是一样的, 就是Map中Key的值.
* 即前台页面<input>中name="" 属性. 但是上面的getFileName只是得到这个Map的Key,
* 而Spring在处理上传文件的时候会把这个值以name属性 记录到对应的每一个文件. 如果需要从文件层面获取这个
* 值, 则可以使用该方法
*/
String name = multipartFile.getName();
System.out.println("name: " + name);


// 获取文件大小, 单位为字节
long size = multipartFile.getSize();
System.out.println("size: " + size);


}
}
}
JSONObject json = new JSONObject();
json.put("json", "success");
SpringMvcUtils.renderJson(response, json.toJSONString());


}



/**
* 删除文件
* @param pathName
* @param fileName
* @return
*/
public static boolean deleteFile(String pathName, String fileName){
boolean flag = false;
File file = new File(pathName + fileName);
if(file.exists()&& !file.isDirectory()){
        flag = file.delete();
        }
        
        return flag;

}


//推荐使用SpringMvcUtils.renderJson(response, json.toJSONString());进行json转换


至于前端使用普通的Ajax上传


<input type="file" id="qw" multiple="files" accept="image/jpg,image/jpeg" name="qw">

 $.ajaxFileUpload
(
{
url: '/smartSCRT/admin/addUserImage.xhtml', //用于文件上传的服务器端请求地址
secureuri: false, //是否需要安全协议,一般设置为false
fileElementId: 'qw', //文件上传域的ID
dataType: 'content', //返回值类型 一般设置为json
success: function (data){ //服务器成功响应处理函数
$('.dc_preLoadBox').css('display','none');
$.gritter.add({
                    title: '提示',
                    text: '导入成功!',
                    time: '20000',
                    class_name: 'gritter-info gritter-center'
                });
},
error: function (data,status, e)//服务器响应失败处理函数
{
alert(e)
}
}
)  

猜你喜欢

转载自blog.csdn.net/qq_37996327/article/details/80856770