• SprintBoot 实现上传下载


    本人在 .NET 转JAVA 的路上 ,也在学习SpringBoot相关知识,这里记录一下在Springboot中实现文件上传下载的核心代码

    package com.file.demo.springbootfile;

    import com.file.util.ResultUtil;
    import org.apache.commons.lang.exception.ExceptionUtils;
    import org.apache.tomcat.util.http.fileupload.IOUtils;
    import org.apache.tomcat.util.http.fileupload.util.Streams;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    /*
    * springboot整合vue,文件上传下载
    * */
    //上传不要用@Controller,用@RestController
    @RestController
    @RequestMapping("/file")
    public class FileController {
    private static final Logger logger = LoggerFactory.getLogger(FileController.class);
    //在文件中,不用/或者最好,推荐使用File.separator
    private final static String fileDir="files";
    private final static String rootPath = System.getProperty("user.home")+ File.separator+fileDir+File.separator;

    /*
    * 文件上传
    * */
    @RequestMapping("/upload")
    public Object uploadFile(@RequestParam("file")MultipartFile[] multipartFiles, final HttpServletResponse response, final HttpServletRequest request){
    File fileDir = new File(rootPath);
    /*
    * exists():测试此抽象路径名表示的文件是否存在
    * isDirectory():检查一个对象是否是文件夹
    * isFile():判断是否为文件,也可能是文件目录
    * */
    if(!fileDir.exists() && !fileDir.isDirectory()){
    //检查到文件不存在则创建
    fileDir.mkdir();//创建文件,一级
    fileDir.mkdirs();//创建多级
    }
    try{
    if(multipartFiles != null && multipartFiles.length > 0){
    for ( int i = 0;i<multipartFiles.length;i++){
    try{
    String storagePath = rootPath+multipartFiles[i].getOriginalFilename();
    logger.info("上传的文件:" + multipartFiles[i].getName()+","+multipartFiles[i].getContentType()+","
    +multipartFiles[i].getOriginalFilename() + ",保持的路径为:" + storagePath);
    Streams.copy(multipartFiles[i].getInputStream(), new FileOutputStream(storagePath), true);
    }catch (IOException e){
    logger.info(ExceptionUtils.getFullStackTrace(e));
    }
    }
    }
    }catch (Exception e){
    return ResultUtil.error(e.getMessage());
    }
    return ResultUtil.success("上传成功!");
    }


    /*
    * 文件下载
    * */
    @RequestMapping("/download")
    public Object downkiadFile(@RequestParam String fileName,final HttpServletResponse response,final HttpServletRequest request){
    OutputStream os = null;
    InputStream is = null;
    try{
    //获取输出流rootPath
    os = response.getOutputStream();
    //重置输出流
    response.reset();
    response.setContentType("application/x-download;charset=GBK");
    response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("utf-8"), "iso-8859-1"));

    //读取流
    File f= new File(rootPath+fileName);
    is = new FileInputStream(f);
    if(is == null){
    logger.error("下载文件失败,请检查文件“"+ fileName +"”是否存在");
    return ResultUtil.error("下载附件失败,请检查文件“" + fileName + "”是否存在");
    }
    //复制文件
    IOUtils.copy(is,response.getOutputStream());
    //刷新缓冲
    response.getOutputStream().flush();
    }catch (IOException e){
    return ResultUtil.error("下载文件失败,error:" + e.getMessage());
    }
    //文件的关闭在finally中执行
    finally {
    {
    try {
    if(is != null){
    is.close();
    }
    }catch (IOException e){
    logger.error(ExceptionUtils.getFullStackTrace(e));
    }
    try{
    if(os != null){
    os.close();
    }
    }catch (IOException e){
    logger.info(ExceptionUtils.getFullStackTrace(e));
    }
    }
    }
    return null;
    }
    }

    源码下载地址: https://github.com/struggle0903/SpringBootfiledemo.git

  • 相关阅读:
    Cisco Packet Tracer 7.2
    "%Error opening tftp://255.255.255.255/network config"
    CPI 3.0磁盘空间不足!
    ASA Failover
    思科交换机配置单播MAC地址过滤
    WLC HA模式下的注意事项
    802.11r mixed mode
    IEEE 802.11r-2008
    iOS 上通过 802.11k、802.11r 和 802.11v 实现 Wi-Fi 网络漫游
    Flexconnect部署
  • 原文地址:https://www.cnblogs.com/Struggle-xh/p/11124181.html
Copyright © 2020-2023  润新知