zoukankan      html  css  js  c++  java
  • JAVA 文件的上传下载

    一、上传文件

      1、使用 transferTo 上传

    @ResponseBody
        @RequestMapping(value = "/file/upload")
        public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) {
            ResultModel resultModel = new ResultModel();
            String fileName = file.getOriginalFilename();
            String newFileName = IdUtil.uuid() + "_" + fileName;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String dateFolder = sdf.format(new Date());
    
            //文件后缀名
            String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名
            String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式
            String uploadPath = "/usr/data/upload"; //服务器上传路径
    
            if(staticFileType.indexOf(fileNameLower) != -1){
                long len = file.getSize(); //上传文件大小
                if(len <= 20971520) {
                    if (file.isEmpty()) {
                        return resultModel;
                    }
                    //上传文件 服务器路径 + 当前日期 例如:201900808
                    String fileUploadPath = uploadPath + "/"+dateFolder + "/";
                    File f = new File(fileUploadPath);
                    if(!f.exists()){
                        f.mkdirs();
                    }
                    String filePath = fileUploadPath  + newFileName;
                    File targetFile = new File(filePath);
                    try {
                        //将上传的文件写到服务器上指定的文件。
                        file.transferTo(targetFile);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //保存文件路径到数据库中
                    fileAttachService.insert(filePath, fileName);
                }else{
                    resultModel.setStatus(500);
                    resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M
                    return resultModel;
                }
            }else{
                resultModel.setStatus(500);
                resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范
                return resultModel;
            }
            return resultModel;
        }
    

      2.使用 org.springframework.util.FileCopyUtils.copy()

    import org.springframework.util.FileCopyUtils;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.multipart.MultipartFile;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    
    public class UploadFilesController {
        @ResponseBody
        @RequestMapping(value = "/file/upload")
        public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) {
            ResultModel resultModel = new ResultModel();
            String fileName = file.getOriginalFilename();
            String newFileName = IdUtil.uuid() + "_" + fileName;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String dateFolder = sdf.format(new Date());
    
            //文件后缀名
            String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名
            String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式
            String uploadPath = "/usr/data/upload"; //服务器上传路径
    
            if(staticFileType.indexOf(fileNameLower) != -1){
                long len = file.getSize(); //上传文件大小
                if(len <= 20971520) {
                    if (file.isEmpty()) {
                        return resultModel;
                    }
                    //上传文件 服务器路径 + 当前日期 例如:201900808
                    String filePath = uploadPath + "/"+dateFolder + "/" ;
                   
                    File saveFile = new File(filePath,newFileName);
                    try {
                        if(!saveFile.exists()){
                            saveFile.createNewFile();
                        }
                        FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(saveFile));
                    }
                    catch (IOException e) {
                        e.printStackTrace();
                    }
                    //保存文件路径到数据库中
                    fileAttachService.insert(filePath, fileName);
                }else{
                    resultModel.setStatus(500);
                    resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M
                    return resultModel;
                }
            }else{
                resultModel.setStatus(500);
                resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范
                return resultModel;
            }
            return resultModel;
        }
    }

    二、下载文件

    import org.apache.commons.io.IOUtils;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import java.io.*;
    public class UploadFilesController {
    
        @RequestMapping(value = "/file/download/{fileId}")
        public void download(@PathVariable("fileId") String fileId, HttpServletRequest request, HttpServletResponse response) {
            FileAttach fileAttach = fileAttachService.selectById(fileId);
            File file = new File(fileAttach.getFilePath());
    
            InputStream in = null;
            OutputStream os = null;
            try {
                //String fileName = URLEncoder.encode(fileAttach.getFileName(), "UTF-8").replaceAll("\+", "%20");
                String fileName = new String(fileAttach.getFileName().getBytes("gb2312"), "ISO8859-1");//解决中文名乱码
                response.setCharacterEncoding("utf-8");
                response.setContentType("multipart/form-data");
                response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
                response.setHeader("Content-Length", ""file.length());//展示下载进度
                in = new FileInputStream(file);
                os = response.getOutputStream();
                IOUtils.copyLarge(in, os);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally {
                IOUtils.closeQuietly(in);
                IOUtils.closeQuietly(os);
            }
        }
    }
    

      

  • 相关阅读:
    多层交换概述
    多层交换MLS笔记2
    多层交换MLS笔记1
    RSTP Proposal-Agreement
    RSTP Note
    保护STP
    优化STP
    Cisco STP Note
    25、C++的顶层const和底层const
    43、如何用代码判断大小端存储
  • 原文地址:https://www.cnblogs.com/bert227/p/11364551.html
Copyright © 2011-2022 走看看