spring MVC实现文件上传

之前介绍了文件上传的原生方法,这次通过spring MVC提供的方法快速实现文件上传。

首先是基本jar包的基础上必须有 commons-fileupload-1.3.1.jar

配置spring MVC:

<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!--能配置多少个property,可以查文档和查询源代码 -->
		<!--最大上传文件的大小 单位字节-->
		<property name="maxUploadSize" value="8388608"></property>
		<property name="resolveLazily" value="true"></property>
	</bean>

controller:

@RequestMapping(value="fileUpload")
public String fileUpload(MultipartFile fx,Model model) throws IOException{
	System.out.println(fx.getOriginalFilename());
	FileUtils.writeByteArrayToFile(new File("d://"+fx.getOriginalFilename()),//存放路径
       fx.getBytes());
	model.addAttribute("msg", "上传成功!");
	return "fileUpload";
}

前台表单:

<form action="${app}fileUpload.do" method="POST" enctype="multipart/form-data">
  		文件:<input type="file" name="fx"/>
  		<input type="submit" value="提交"/>${msg}
</form>

这样就实现了文件的上传。但我们通常实现上传以后还要进行读取,下面顺便写个io读取:

@RequestMapping(value="getImg")
@ResponseBody
public void createFolw(HttpServletRequest request,
		HttpServletResponse response, Model model) {
	// response.setContentType("image/*");
	FileInputStream fis = null;
	OutputStream os = null;
	try {
		fis = new FileInputStream("d://51f88071c08ea_120_80.jpg"); //imgurl
		os = response.getOutputStream();
		int len = 0;
		byte[] array = new byte[1024];
		while ((len = fis.read(array)) != -1) {
			os.write(array, 0, len);
			os.flush();
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	try {
		fis.close();
		os.close();
	} catch (IOException e) {
		e.printStackTrace();
	}

}

通常项目中不止会有一处需要文件上传, 可以统统调用此方法进行读取。为了代码整洁干练,也可以封装为一个util类:

public class ImgUtil  extends HttpServlet {

	private static final ServletOutputStream sos = null;

	public static ServletOutputStream getFileImg(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//1. 获取请求参数-图片的url
		String imgurl=req.getParameter("imgurl");
		//2. 表单验证(略)
		//3. 执行逻辑-通过输入流读取图片的内容,通过输出流写给用户
		FileInputStream fis=null;
		
		try {
			// 根据图片url获取图片的真实路径
			
			String realPath=req.getServletContext().getRealPath(imgurl);
			// 需要的路径是图片在服务器上的绝对路径
			fis=new FileInputStream(realPath);
			// 获取向应答实体内容中输入内容的输出流
			ServletOutputStream sos=resp.getOutputStream();
			byte[] array=new byte[1024];
			// 从服务器本地读取图片的一部分内容
			int len=fis.read(array);
			while(len!=-1){
				//向应答实体内容中输出图片的内容
				sos.write(array, 0, len);
				len=fis.read(array);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(fis!=null){
				fis.close();
			}
		}
		return sos;
	}
   
}

这样调用就会好看很多:

@RequestMapping(value = "getFileImg")
	public OutputStream getFileImg(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException{
		OutputStream movieImg = ImgUtil.getFileImg(req, resp);
		return movieImg;
	}

慢慢进步,慢慢改变,节奏虽快,心不要慌~~

猜你喜欢

转载自blog.csdn.net/qq_37333151/article/details/84865506
今日推荐