springMVC文件上传与下载

在jsp页面中

文件上传:
	<!-- enctype表示多功能表单 -->
	<form action="${pageContext.request.contextPath}/file/up.action" method="post" enctype="multipart/form-data">
	    头像:<input type="file" name="myfile"/>
	    <input type="submit"/>
	</form>
	
	<img src="${pageContext.request.contextPath}${imgsrc}">
	<br/>
	文件下载
	<a href="${pageContext.request.contextPath}/file/down.action?fileName=111.jpg">下载111.jpg</a>

spring.xml文件中需要如下配置:(5242880表示的是5M的大小)

<!-- 文件上传解析器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="maxUploadSize">
	<value>5242880</value>
	</property>
	</bean>

创建一个文件上传的类如下:

package com.zy.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

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

import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/file")
public class FileController {
	//辅助方法
	//1根据逻辑路径得到真实路径
	@SuppressWarnings("deprecation")  //逻辑路径
	public String myGetRealPath(String path,HttpServletRequest request){
		
		String realPath = request.getRealPath(path);
		System.out.println("真实路径:"+realPath);
		
		File file = new File(realPath);
		if(!file.exists()){//如果不存在就创建一个
		 file.mkdirs();	
		}
		
		return realPath;
	}
	//2更改文件名
	public String newFileName(MultipartFile file){//参数是文件对象
		String originalFilename = file.getOriginalFilename();
	    //abc.jpg
		//截取后缀,拼接新的文件名
		//后缀
		String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
		//新文件名要求:上传中-防止文件名重复,发生覆盖
		String uu = UUID.randomUUID().toString();
		
		String newName=uu+substring;
		return  newName;
		
	}
	//上传--//如果controller只需要跳转页面的话,可以把返回值写成String
	@SuppressWarnings("resource")
	@RequestMapping("/up")
	public String up(MultipartFile myfile,HttpServletRequest request) throws Exception{
		//得到真实路径
		String path="/img";//逻辑路径
		String myGetRealPath = myGetRealPath(path, request);
		//得到新的文件名
		String newFileName = newFileName(myfile);
		
		//上传本质---把本地文件按流的方式copy到服务上
		//输入流
		InputStream inputStream = myfile.getInputStream();
		//输出流
		FileOutputStream fileOutputStream = new FileOutputStream(myGetRealPath+"/"+newFileName);
		
		//copy
		IOUtils.copy(inputStream, fileOutputStream); //结束
		
		//关闭资源
		inputStream.close();
		fileOutputStream.close();
		
		//回显图片
		request.setAttribute("imgsrc", path+"/"+newFileName);
		return "/index.jsp";
		
	}
	
	//图片下载
	@RequestMapping("/down")
	public void down(HttpServletResponse response,String fileName,HttpServletRequest request) throws IOException {
		//设置头---- 下载和预览的区别,下载需要加上attachment
		response.setHeader("Content-Disposition", "attachment;fileName="+fileName);
		//下载的本质--文件按流的方式用服务器copy到本地
		//得到资源在服务器的真实路径
		String path = "/aaa/" + fileName;
		
		String myGetRealPath = myGetRealPath(path, request);
		//创建输入流
		FileInputStream fileInputStream = new FileInputStream(myGetRealPath);
		//输出流
		ServletOutputStream outputStream = response.getOutputStream();
		
		IOUtils.copy(fileInputStream, outputStream);
		//关闭资源
		fileInputStream.close();
		outputStream.close();
	}

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值