Spring MVC下载文件、上传
2018-01-24 20:49
423 查看
1、这是SpringMVC封装的东西,代码比较简单,但是局限性很大,貌似超过1.4G就会包异常,
前端不用ajax请求,<a herf="action"></a>即可。
@RequestMapping("/downbrowser1")
public ResponseEntity<byte[]> download(String fwqlj) throws IOException {
HttpHeaders headers=null;
File file=null;
if(fwqlj!=null){
//文件指定的路径
file=new File("D:\\demo\\tzf.xlsx");
headers= new HttpHeaders();
String fileName=new String(file.getName().getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
}
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
headers, HttpStatus.CREATED);
}
2、这个就比较通用了,几乎没有局限性,就是有点慢。不过比较大的文件都会使用ftp服务器。
@RequestMapping("/downbrowser")
public void download1(HttpServletRequest request,
HttpServletResponse response,String fwqlj) throws IOException {
//从前端传入一个文件的路径
if(fwqlj!=null){
File file = new File(fwqlj);
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
//2.设置文件头:最后一个参数是设置下载文件名(假如我们叫demo.doc)
String file_name = URLEncoder.encode(file.getName(),"UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName="+file_name);
ServletOutputStream out=null;
//通过文件路径获得File对象(假如此路径中有一个download的文件)
try {
FileInputStream inputStream = new FileInputStream(file);
//3.通过response获取ServletOutputStream对象(out)
out = response.getOutputStream();
int b = 0;
byte[] buffer = new byte[1024];
b = inputStream.read(buffer);
while (b != -1){
//4.写到输出流(out)中
out.write(buffer,0,b);
b = inputStream.read(buffer);
}
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//记得一定要关闭
if(out!=null){
out.close();
out.flush();
}
}
}
}
3、这是一个文件的上传,很简单,直接上代码
@RequestMapping("/wjsc")
@ResponseBody
public String uplodFile(HttpServletRequest request,Model model){
Msg m=null;
String fwqlj = request.getParameter("demo1");
String mksm = request.getParameter("demo2");
String lx = request.getParameter("demo3");
String mklx = request.getParameter("demo4");
String fwqljr="";
try {
File f=null;
if(fwqlj!=null){
f=new File(fwqlj);
}
if(f!=null && !f.exists()){
f.mkdirs();
}
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)){
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator<String> fileNames = multiRequest.getFileNames();
while(fileNames.hasNext())
{
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(fileNames.next().toString());
if(file!=null)
{
//随机生成long类型的8位数字串
Long long1 = UUIDGenerator.getUniqueLong();
String path ="/"+long1+file.getOriginalFilename();
fwqljr=fwqlj+path;
//上传
file.transferTo(new File(fwqljr));
}
}
}
//把路径保存到数据库
boolean g;
if (gggnService.insertfwqlj(fwqljr, mksm, lx, mklx)) g = true;
else g = false;
m=new Msg();
if(g){
m.setMsg("上传成功");
}else{
m.setMsg("该模板已经存在");
}
} catch (IOException e) {
m.setMsg("文件已经存在或者服务异常");
log.error("上传文件失败",e);
}
return m.getMsg();
}
前端不用ajax请求,<a herf="action"></a>即可。
@RequestMapping("/downbrowser1")
public ResponseEntity<byte[]> download(String fwqlj) throws IOException {
HttpHeaders headers=null;
File file=null;
if(fwqlj!=null){
//文件指定的路径
file=new File("D:\\demo\\tzf.xlsx");
headers= new HttpHeaders();
String fileName=new String(file.getName().getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
}
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
headers, HttpStatus.CREATED);
}
2、这个就比较通用了,几乎没有局限性,就是有点慢。不过比较大的文件都会使用ftp服务器。
@RequestMapping("/downbrowser")
public void download1(HttpServletRequest request,
HttpServletResponse response,String fwqlj) throws IOException {
//从前端传入一个文件的路径
if(fwqlj!=null){
File file = new File(fwqlj);
//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
response.setContentType("multipart/form-data");
//2.设置文件头:最后一个参数是设置下载文件名(假如我们叫demo.doc)
String file_name = URLEncoder.encode(file.getName(),"UTF-8");
response.setHeader("Content-Disposition", "attachment;fileName="+file_name);
ServletOutputStream out=null;
//通过文件路径获得File对象(假如此路径中有一个download的文件)
try {
FileInputStream inputStream = new FileInputStream(file);
//3.通过response获取ServletOutputStream对象(out)
out = response.getOutputStream();
int b = 0;
byte[] buffer = new byte[1024];
b = inputStream.read(buffer);
while (b != -1){
//4.写到输出流(out)中
out.write(buffer,0,b);
b = inputStream.read(buffer);
}
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
//记得一定要关闭
if(out!=null){
out.close();
out.flush();
}
}
}
}
3、这是一个文件的上传,很简单,直接上代码
@RequestMapping("/wjsc")
@ResponseBody
public String uplodFile(HttpServletRequest request,Model model){
Msg m=null;
String fwqlj = request.getParameter("demo1");
String mksm = request.getParameter("demo2");
String lx = request.getParameter("demo3");
String mklx = request.getParameter("demo4");
String fwqljr="";
try {
File f=null;
if(fwqlj!=null){
f=new File(fwqlj);
}
if(f!=null && !f.exists()){
f.mkdirs();
}
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)){
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator<String> fileNames = multiRequest.getFileNames();
while(fileNames.hasNext())
{
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(fileNames.next().toString());
if(file!=null)
{
//随机生成long类型的8位数字串
Long long1 = UUIDGenerator.getUniqueLong();
String path ="/"+long1+file.getOriginalFilename();
fwqljr=fwqlj+path;
//上传
file.transferTo(new File(fwqljr));
}
}
}
//把路径保存到数据库
boolean g;
if (gggnService.insertfwqlj(fwqljr, mksm, lx, mklx)) g = true;
else g = false;
m=new Msg();
if(g){
m.setMsg("上传成功");
}else{
m.setMsg("该模板已经存在");
}
} catch (IOException e) {
m.setMsg("文件已经存在或者服务异常");
log.error("上传文件失败",e);
}
return m.getMsg();
}
相关文章推荐
- Spring MVC之文件上传与下载
- 进击的java(5) spring mvc 文件上传下载
- Spring mvc文件上传与下载
- Spring MVC框架文件上传返回JSON在IE浏览器中提示下载解决方法
- Spring MVC文件上传 下载
- Spring MVC 文件上传下载
- Spring MVC 4 文件上传下载 Hibernate+MySQL例子 (带源码)
- Spring MVC 文件的上传下载
- spring mvc实现文件上传与下载功能
- Spring MVC(9):文件上传(单文件,多文件) & 下载
- spring mvc番外篇(一):文件上传下载
- Spring MVC 中文件上传/删除 删除空文件夹方法 + 下载方法
- 基于Spring Mvc实现的Excel文件上传下载
- Spring MVC 实现文件的上传和下载
- Spring mvc 文件上传 下载
- Spring MVC文件上传下载工具类
- spring mvc文件上传下载
- 文件的上传与下载之方式3:Spring MVC
- spring mvc 用ajaxSubmit 在iE8上传文件变下载的问题
- Spring MVC 文件上传与下载