博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot-2-springboot的文件上传和下载
阅读量:6155 次
发布时间:2019-06-21

本文共 4898 字,大约阅读时间需要 16 分钟。

hot3.png

单文件上传

1, 需要使用thymeleaf模板:  http://www.cnblogs.com/wenbronk/p/6565834.html

src/main/resource/template/file.html

 

            Hello World!               

文件:

 

文件上传方法

 

package com.iwhere.main.controller;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.List;import java.util.UUID;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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.RestController;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;/** * 文件上传controller *  * @RestController 相当于同时 @Controller和@ResponseBody两个注解 *  * @author wenbronk * @time 2017年4月6日 下午2:43:03 2017 */@RestControllerpublic class FileUploadController {    /**     * 文件上传     *      * @return     */    @RequestMapping(value = "/upload", method = RequestMethod.POST)    public String handlFileUpload(@RequestParam("file") MultipartFile file) {        if (file.isEmpty()) {            return "文件是空的";        }        // 读取文件内容并写入 指定目录中        String fileName = file.getOriginalFilename();        // String suffixName = fileName.substring(fileName.lastIndexOf("."));        fileName = UUID.randomUUID() + "|+=|-|" + fileName;        File dest = new File("E:/test/" + fileName);        // 判断目录是否存在        if (!dest.getParentFile().exists()) {            dest.getParentFile().mkdirs();        }        try {            file.transferTo(dest);        } catch (IOException e) {            return "后台也不知道为什么, 反正就是上传失败了";        }        return "上传成功";    }}

 

多文件上传:

1, thymeleaf

src/main/resource/template/multifile.html

 

            Hello World!               

文件1:

文件2:

文件3:

 

2, 多文件上传方法

 

/**     * 多文件上传     * 类似单文件上传, 遍历     * @return     */    @RequestMapping(value = "multiUpload", method = RequestMethod.POST)    public String handleMultiFileupload(HttpServletRequest request) {        List
files = ((MultipartHttpServletRequest) request).getFiles("file"); for (MultipartFile multipartFile : files) { if (multipartFile.isEmpty()) { return "文件是空的"; } // 读取文件内容并写入 指定目录中 String fileName = multipartFile.getOriginalFilename(); // String suffixName = // fileName.substring(fileName.lastIndexOf(".")); fileName = UUID.randomUUID() + "|+=|-|" + fileName; File dest = new File("E:/test/" + fileName); // 判断目录是否存在 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } try { multipartFile.transferTo(dest); } catch (IOException e) { return "后台也不知道为什么, 反正就是上传失败了"; } } return "上传成功"; }

 

文件下载

 

/**     * 文件下载     *      * @return     */    @RequestMapping("/download")    public String downLoadFile(HttpServletRequest request, HttpServletResponse response) {        // 文件名可以从request中获取, 这儿为方便, 写死了        String fileName = "rtsch_ex.json";        // String path = request.getServletContext().getRealPath("/");        String path = "E:/test";        File file = new File(path, fileName);        if (file.exists()) {            // 设置强制下载打开            response.setContentType("application/force-download");            // 文件名乱码, 使用new String() 进行反编码            response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);            // 读取文件            BufferedInputStream bi = null;            try {                byte[] buffer = new byte[1024];                bi = new BufferedInputStream(new FileInputStream(new File("")));                ServletOutputStream outputStream = response.getOutputStream();                int i = -1;                while (-1 != (i = bi.read(buffer))) {                    outputStream.write(buffer, 0, i);                }                return "下载成功";            } catch (Exception e) {                return "程序猿真不知道为什么, 反正就是下载失败了";            } finally {                if (bi != null) {                    try {                        bi.close();                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }        return "文件不存在";    }

 

文件下载时, 最容易出现文件名乱码的问题, 这儿使用new String() 进行反编码, 

String downname = new String(filename.getBytes("gbk"),"iso8859-1");

当然还有个不太稳的方法: 

URLEncoder.encode(fileName, "UTF-8"));

 

转载于:https://my.oschina.net/maojindaoGG/blog/1605558

你可能感兴趣的文章
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>
SQL优化技巧
查看>>
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>