springmvc(13) springmvc上传单张图片与多张图片的方式

本文介绍如何在SpringMVC应用中实现多文件上传功能,包括配置multipart解析器、添加上传图片的依赖、设置虚拟目录及两种上传方法。

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

目录

需求

springmvc中对多部件类型解析

加入上传图片的jar

 创建图片虚拟 目录 存储图片

上传图片代码

controller方法

多文件上传的两种方式


 


需求

在修改商品页面,添加图片上传功能

springmvc中对多部件类型解析

在 页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。

在springmvc.xml中配置multipart类型解析器。

加入上传图片的jar

上边的解析内部使用下边的jar进行图片上传。

 创建图片虚拟 目录 存储图片

通过图形界面配置:

 

也可以直接修改tomcat的配置:

在conf/server.xml文件,添加虚拟 目录 :

 

 

注意:在图片虚拟目录 中,一定将图片目录分级创建(提高i/o性能),一般我们采用按日期(年、月、日)进行分级创建。

上传图片代码

 

 

页面

controller方法

修改:商品修改controller方法:

 

多文件上传的两种方式

生成uuid

import java.util.UUID;

public class CommonUtils {
	//生成一个大写的uuid的字符转   
	public static String uuid() {
		return UUID.randomUUID().toString().replace("-","").toUpperCase();
	}
	
}

方式一通过数组接受

@Controller
@RequestMapping("/SuggestMsg")
public class SuggestMsg {
	@Autowired
	private ReportInfoService ris;
	//提交反馈    传入用户id  视频  视频名称  将视频名称用逗号分隔 合并存放到数据库    
	@RequestMapping(params={"type=1"})
	@ResponseBody
	public Map<String, Object> suggestSubmit(String content,@RequestParam MultipartFile[] files,HttpServletRequest request,String uid) {
		MultipartFile file=null;
		StringBuffer sb = new StringBuffer();
		if (files!=null&&files.length!=0) {
			System.out.println(files.length);
			for (int i = 0; i < files.length; i++) {
				file = files[i];
				sb = saveFile(file,request,sb);
			}	
		}
		Map<String, Object> map = ris.suggestSubmit(content,uid,sb.toString());
		return map;
	}

	private StringBuffer saveFile(MultipartFile file, HttpServletRequest request, StringBuffer sb) {
		// TODO Auto-generated method stub
		try {
			if (!file.isEmpty()) {
				//String pic_path = "d:\\Users\\Administrator\\Desktop\\mm\\20191009\\img\\";
				String pic_path = ConfigUtil.getConfigValue("SUGGEST_IMG");
				String originName = file.getOriginalFilename();
				String newName = CommonUtils.uuid() + originName.substring(originName.lastIndexOf("."));
				System.out.println(newName);
				File newFile = new File(pic_path+newName);
				file.transferTo(newFile);
				sb.append(newName).append(",");
			}
		} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
	
		return sb;
	}

方式二、转换成把request强转成MultipartHttpServletRequest  获取一个列表

package com.pbl.msg;

import static org.hamcrest.CoreMatchers.nullValue;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.pbl.entity.ReportInfo;
import com.pbl.finalconstant.ConstantState;
import com.pbl.logic.ReportInfoService;
import com.pbl.utils.CommonUtils;
import com.pbl.utils.ConfigUtil;

@Controller
@RequestMapping("/SuggestMsg")
public class SuggestMsg1 {
	@Autowired
	private ReportInfoService ris;
	//提交反馈    传入用户id  视频  视频名称  将视频名称用逗号分隔 合并存放到数据库    @RequestParam(value="files",required=false) MultipartFile[] files,
	@RequestMapping(params={"type=1"})
	@ResponseBody
	public Map<String, Object> suggestSubmit(String content, HttpServletRequest request, String uid) {
		System.out.println("xxx");
		// 转为MultipartHttpRequest		
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;

		// 获得文件
		List<MultipartFile> files = multipartRequest.getFiles("files");
		MultipartFile file = null;
		StringBuffer sb = new StringBuffer();
		if (files != null && files.size() != 0) {
			System.out.println(files.size());
			for (int i = 0; i < files.size(); i++) {
				file = files.get(i);
				sb = saveFile(file, request, sb);
			}
		}
		Map<String, Object> map = ris.suggestSubmit(content, uid, sb.toString());
		return map;
	}

	private StringBuffer saveFile(MultipartFile file, HttpServletRequest request, StringBuffer sb) {
		// TODO Auto-generated method stub
		try {
			if (!file.isEmpty()) {
				//String pic_path = "d:\\Users\\Administrator\\Desktop\\mm\\20191009\\img\\";
				String pic_path = ConfigUtil.getConfigValue("SUGGEST_IMG");
				String originName = file.getOriginalFilename();
				String newName = CommonUtils.uuid() + originName.substring(originName.lastIndexOf("."));
				System.out.println(newName);
				File newFile = new File(pic_path+newName);
				file.transferTo(newFile);
				sb.append(newName).append(",");
			}
		} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			
	
		return sb;
	}
	
	
	
	
	

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值