基于spring的文件上传下载

Posted 蕾姆大人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于spring的文件上传下载相关的知识,希望对你有一定的参考价值。

技术分享图片
package com.zsf.util;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

public class FileLoadUtil{

    /**
     * 图片上传
     * @param request
     * @param file
     */
    public static String upload(HttpServletRequest request, MultipartFile file){

        //重新定义文件名防止重名被替换
        String fileName = UUIDUtil.createUUID();
        //获取文件上传的路径
        String path = request.getServletContext().getRealPath("/images");

        //如果上传目录不存在,则创建出来
        File dir = new File(path);
        if(!dir.exists()){
            dir.mkdir();
        }
        //获取上传的文件名(也可以自定义)
        //String fileName = file.getOriginalFilename();
        //构建一个完整文件信息(路径 + 文件名)
        File fileMessage = new File(dir.getAbsolutePath() + "/" + fileName);
        try {
            //执行上传,只需要调用transferTo方法即可
            file.transferTo(fileMessage);
            //将文件名放入model中
//            model.addAttribute("fileName", fileName);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("上传图片失败");
        }
        return fileName;
    }

    /**
     * 图片下载
     * @param fileName
     * @param request
     * @return
     */
    public static ResponseEntity<byte[]> downLoad(String fileName,HttpServletRequest request){
        //获取下载路径
        String path = request.getServletContext().getRealPath("/images");
        //构建下载文件
        File file = new File(path + "/" + fileName);
        //创建HttpHeaders设置响应头信息
        HttpHeaders headers = new HttpHeaders();
        try {
            //设置在响应头中的文件名称,这里进行重新编码,防止中文乱码
            String headerFileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
            //设置内容以附件的方式下载
            headers.setContentDispositionFormData("attachment", headerFileName);
            //设置相应类型为application/octet-stream
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            //创建ResponseEntity对象
            ResponseEntity<byte[]> entity = new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
            return entity;
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("文件下载失败");
        }
    }
}
fileLoad

 

以上是关于基于spring的文件上传下载的主要内容,如果未能解决你的问题,请参考以下文章

基于spring的文件上传下载

java Ftp上传创建多层文件的代码片段

spring基于注解和配置源码解读

基于XML和注解的Spring定时器

如何通过 HttpWebRequest 上传文件?

完全下载文件时,将下载的文件从一个片段传递到另一个片段