文件上传的思路和步骤以及多文件上传、文件下载

1、先判断文件是否为空(为空的话返回一个错误提示)

 if (file.isEmpty()) {
            return ResultInfo.error(500, "文件为空");
        }

2、获取文件名

String fileName = file.getOriginalFilename();
        logger.info("上传的文件名为:" + fileName);

3、获取文件的后缀名

String suffixName = fileName.substring(fileName.lastIndexOf("."));
        logger.info("上传的后缀名为:" + suffixName);

4、限制上传文件类型

if (suffixName.equals(".jpg") || suffixName.equals(".png") || suffixName.equals(".doc") || suffixName.equals(".docx") || suffixName.equals(".ppt"))
            logger.info("上传的后缀名为:" + suffixName);

5、设置文件上传后的路径

String filePath = "D:\\nginx-1.17.5\\html\\";

6、检测是否存在该目录

if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }

7、创建文件记录对象,添加文件信息

try {
            file.transferTo(dest);
            String pathNmae = HTTPURL + uuidFileName;

            /**
             * 创建文件记录对象 添加文件信息
             */
            SystemFile recode = new SystemFile();
            recode.setFileName(uuidFileName);
            recode.setUpdateTime(new Date());
            recode.setUfIp(UrlEscapers.urlFragmentEscaper().escape(pathNmae));
            recode.setSiteId(siteId);
            recode.setUserId(userId);
            recode.setAddType(type);
            fileService.insertSelective(recode);
            return ResultInfo.success(UrlEscapers.urlFragmentEscaper().escape(pathNmae));
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResultInfo.error(500, "上传失败");
    }

多文件上传:

@PostMapping("/marketingUploads")
    @ApiOperation(value = "文件上传", notes = "多文件上传", httpMethod = "POST")
    @ResponseBody
    public ResultInfo marketingUploads(HttpServletRequest request,
                                  @RequestParam("files") MultipartFile[] files,
                                  @RequestParam(value = "siteId", required = true) Integer siteId,
                                  @RequestParam(value = "userId", required = true) Integer userId,
                                  @RequestParam(value = "type", required = false) Integer type) {
        try {
            logger.info("====文件上传开始====");
            List<String> pathNmae = new ArrayList<>();
            // 如果文件不为空,写入上传路径,进行文件上传
            if (null != files && files.length > 0) {
                for (MultipartFile file : files) {
                    // 测试MultipartFile接口的各个方法
                    logger.info("文件类型ContentType=" + file.getContentType());
                    logger.info("文件组件名称Name=" + file.getName());
                    logger.info("文件原名称OriginalFileName=" + file.getOriginalFilename());
                    logger.info("文件大小Size=" + file.getSize() + "byte or " + file.getSize() / 1024 + "KB");
                    // 获取上传的文件名称,并结合存放路径,构建新的文件名称
                    String fileName = file.getOriginalFilename();
                    // 文件上传后的路径
                    String filePath = "D:\\nginx-1.17.5\\html\\marketing\\";
                    //得到一个唯一数
                    UUID uuid = UUID.randomUUID();
                    // 获取文件的后缀名
                    String suffixName = fileName.substring(fileName.lastIndexOf("."));
                    // 拼接避免文件重复
                    String uuidFileName = uuid + "/" + fileName;
                    //获取要上传的路径文件名
                    File dest = new File(filePath + uuidFileName);
                    //判断要上传的路径是否存在
                    if (!dest.getParentFile().exists()) {
                        //不存在创建一个路径
                        dest.getParentFile().mkdirs();
                    }
                    //将上传文件保存到目标文件目录
                    file.transferTo(dest);
                    String pathNmaeand = HTTPURL + "marketing/" + uuidFileName;
                    pathNmae.add(UrlEscapers.urlFragmentEscaper().escape(pathNmaeand));
                    /**
                     * 创建文件记录对象 添加文件信息
                     */
                    SystemFile recode = new SystemFile();
                    recode.setFileName(fileName);
                    recode.setContent(suffixName);
                    recode.setUpdateTime(new Date());
                    recode.setUfIp(UrlEscapers.urlFragmentEscaper().escape(pathNmaeand));
                    recode.setSiteId(siteId);
                    recode.setUserId(userId);
                    recode.setAddType(type);
                    fileService.insertSelective(recode);
                }
                return ResultInfo.success(pathNmae);
            } else {
                return ResultInfo.error(201, "上传文件失败!");
            }
        } catch (IOException e) {
            logger.info("上传出现异常信息:" + e.getMessage());
            return ResultInfo.error(201, "上传出现异常:" + e.getMessage());
        }
    }

文件下载:

public HttpServletResponse downloadNet(HttpServletResponse response,@RequestParam("pathUrl") String pathUrl, @RequestParam("pathName") String pathName) throws MalformedURLException {
        try {
            String filePath = "D:\\nginx-1.17.5\\html\\";
            // path是指欲下载的文件的路径。
            File file = new File(filePath + pathUrl);
            // 取得文件名。
            String filename = pathName;
            // 取得文件的后缀名。
            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(filePath + pathUrl));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值