栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

文件上传-SpringBoot

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件上传-SpringBoot

IO流回顾:

  1.输入流input:读取外部数据(硬盘、光盘等储存设备的数据)到内存(也就是程序)中;

  2.输出output:将程序(内存)的数据输出到硬盘等储存设备中;

其实文件下载和上传可以这样理解:上传:从本地上传到网络,只需要一步;

而下载,首先得从网络上下载(也就是从外部数据:硬盘..上下载到内存,利用输入流InputStream),然后再保存到本地(意思就是保存到本地这个硬盘上,利用输出流OutputStream),这是两步;

文件下载:

  思路:1、设置路径,若文件存在,响应头设置contentType("application/force-download")设置强制下载。addHeader("Content-Disposition","attachment","fileName"+文件名)设置文件名作为请求头;

2、然后定义输入输出流,输出流负责将程序中的数据(也就是网页中拥有的数据)输出到硬盘中,输入流负责将硬盘也就是外部储存的文件进行读取:

@RequestMapping("/download")
public void download(String path, HttpServletResponse response) {
    try {
        // path是指想要下载的文件的路径
        File file = new File(path);
        log.info(file.getPath());
        // 获取文件名
        String filename = file.getName();
        // 获取文件后缀名
        String ext = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
        log.info("文件后缀名:" + ext);

        // 将文件写入输入流
        FileInputStream fileInputStream = new FileInputStream(file);
        InputStream fis = new BufferedInputStream(fileInputStream);
        byte[] buffer = new byte[fis.available()];
        fis.read(buffer);
        fis.close();

        // 清空response
        response.reset();
        // 设置response的Header
        response.setCharacterEncoding("UTF-8");
        //Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
        //attachment表示以附件方式下载   inline表示在线打开   "Content-Disposition: inline; filename=文件名.mp3"
        // filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
        // 告知浏览器文件的大小
        response.addHeader("Content-Length", "" + file.length());
        OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
        response.setContentType("application/octet-stream");
        outputStream.write(buffer);
        outputStream.flush();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

第二种方法-文件上传:

 1.首先来看MultipartAutoConfiguration自动配置类中绑定配置属性的类:

@ConfigurationProperties(
    prefix = "spring.servlet.multipart",
    ignoreUnknownFields = false
)
public class MultipartProperties {
    private boolean enabled = true;
    private String location;
    private DataSize maxFileSize = DataSize.ofMegabytes(1L);
    private DataSize maxRequestSize = DataSize.ofMegabytes(10L);
    private DataSize fileSizeThreshold = DataSize.ofBytes(0L);
    private boolean resolveLazily = false;

    public MultipartProperties() {
    }

2.然后我们可以在application.properties中对文件上传的一些配置进行自定义设置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB
spring.servlet.multipart.enabled=true

3.然后我们写控制器,利用控制器来完成文件上传操作(当用户在客户端请求文件上传时,控制器对此进行处理)

@Controller
@Slf4j
public class PracticeController {
    @PostMapping("/upload1")
    public String upload(@RequestParam("email")String email,
                         @RequestParam("username") String username,
                         @RequestPart("headerImg") MultipartFile headerImg,
                         @RequestPart("photos") MultipartFile[] photos) throws IOException {
//提示信息
        System.out.println("单文件上传信息为:"+headerImg.getOriginalFilename());
        System.out.println("多文件上传个数为:"+photos.length);
        for (MultipartFile photo : photos) {
            System.out.println("多文件信息为:"+photo.getOriginalFilename()+",文件大小:"+photo.getSize()/1000+"kb");
        }
//        将文件上传到指定文件夹,利用transferTo():复制到
        if(!headerImg.isEmpty()){
            //得到文件名字
            String filename = headerImg.getOriginalFilename();
            headerImg.transferTo(new File("E:\"+filename));
        }
        
//        多文件
        if(photos.length>0){
            for (MultipartFile photo : photos) {
                //将每个文件一一上传
                photo.transferTo(new File("E:\"+photo.getOriginalFilename()));
            }
        }
       return "成功";
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号