图片的批量上传结合springmvc

本文介绍如何使用Spring MVC框架实现文件上传功能,包括MultipartHttpServletRequest的使用、文件的保存及数据库更新等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 用户头像上传


@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)
}
}
)  

java 基于springMVC多图片上传,MySQL源码 @Controller @RequestMapping("/upload") public class UploadFileController { @Autowired private UploadFileService uploadFileService; @RequestMapping("/upfile") public String upload(HttpServletRequest request, @RequestParam("designation") String designation, @RequestParam("remark") String remark, //@RequestParam("file") String file, Model model)throws Exception { String str = designation; String[] st=str.split(","); //以逗号为分隔符进行截取 String re = remark; String[] stre = re.split(","); UploadFile uploadFile = new UploadFile(); //转成文件上传请求 MultipartHttpServletRequest murequest = (MultipartHttpServletRequest)request; //在文件上传请求中获取文件,根据file的name List files = murequest.getFiles("image"); if( files !=null && files.size()>0) { for(int i=0; i<files.size(); i++) { String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase()+"_"; String filename = files.get(i).getOriginalFilename(); //System.out.println("filename="+filename); int hCode =filename.hashCode(); String hex = Integer.toHexString(hCode); String mkdir = hex.charAt(0)+"\\"+hex.charAt(1)+"\\"; String path = request.getServletContext().getRealPath("/images/")+mkdir; //System.out.println("path="+path); File filepath = new File(path,filename); if(!filepath.getParentFile().exists()) { filepath.getParentFile().mkdirs(); } //将上传文件保存到目标文件中 files.get(i).transferTo(new File(path+File.separator+filename)); //获取数据库存储路径 String root = request.getContextPath(); String mkdirsql = hex.charAt(0)+"/"+hex.charAt(1)+"/"; String sqlpath = root+"/images/"+mkdirsql+filename; String imgpath = sqlpath; //图片保存到数据库的路径 uploadFile.setDesignation(st[i]); uploadFile.setRemark(stre[i]); uploadFile.setFile(filename); uploadFile.setImgpath(sqlpath); uploadFileService.addUploadFile(uploadFile); } return "success"; } return "404"; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值