Springboot附件上下载



import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.green.admin.common.annotations.Anonymous;
import com.green.admin.common.responses.Response;
import com.green.admin.common.utils.file.FileUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

@Slf4j
@Api(tags = "附件")
@RestController
public class FileController {

    @Anonymous
    @ApiOperation("上传")
    @PostMapping("/uploadFile")
    public Response<Map<String, Object>> uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request)
            throws IllegalStateException, IOException {
        Map<String, Object> mp = new HashMap<String, Object>();
        // fileName.transferTo(new File("D:\\upload\\"+fileName.getOriginalFilename()));
        // String filePath = "/images/";
        String fileName = file.getOriginalFilename();

        String extendsName=fileName.substring(fileName.lastIndexOf("."));
        String newFileName= UUID.randomUUID().toString()+extendsName;

        String sysPath = System.getProperty("user.dir");
//        String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
        String filePath = sysPath + "\\image\\";
        log.info("filePath--->"+filePath);
        try {
            FileUtil.uploadFile(file.getBytes(), filePath, newFileName);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
//		File dest = new File(filePath+fileName.getOriginalFilename());
//		fileName.transferTo(dest);
        /**  * 下面两种有相同的作用  */
//        System.out.println("==相对路径:同级目录下的配置文件>"+ FileController.class.getResource("application.yml"));
//        System.out.println("==相对路径:相对根目录的下下一级目录下的配置文件>"+FileController.class.getClassLoader().getResource("src/main/resources/application.yml"));
        mp.put("msg", "upload success");
        mp.put("fileName", newFileName);
        return Response.ok(mp);
    }

    @Anonymous
    @ApiOperation("下载")
    @GetMapping("/download")
    public Response downLoad(@RequestParam("fileName") String fileName, HttpServletResponse response,
                             HttpServletRequest request) throws UnsupportedEncodingException {
//        String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
        String sysPath = System.getProperty("user.dir");
        String filePath = sysPath + "\\image\\";
        log.info("filePath--->"+filePath);
        System.out.println("fileName:" + fileName);
        System.out.println("----------file download---" + filePath + fileName);
        File file = new File(filePath + fileName);
        if (file.exists()) { // 判断文件父目录是否存在
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition",
                    "attachment;fileName=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
            byte[] buffer = new byte[1024];
            FileInputStream fis = null; // 文件输入流
            BufferedInputStream bis = null;
            OutputStream os = null; // 输出流
            try {
                os = response.getOutputStream();
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                int i = bis.read(buffer);
                while (i != -1) {
                    os.write(buffer);
                    i = bis.read(buffer);
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    bis.close();
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return Response.ok();
    }

    @ApiOperation("批量上传")
    @PostMapping("/multiUpload")
    public String multiUpload(HttpServletRequest request) {
        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
        String sysPath = System.getProperty("user.dir");
        String filePath = sysPath + "\\image\\";
        log.info("filePath--->"+filePath);
        for (int i = 0; i < files.size(); i++) {
            MultipartFile file = files.get(i);
            if (file.isEmpty()) {
                return "上传第" + (i++) + "个文件失败";
            }
            String fileName = file.getOriginalFilename();

            File dest = new File(filePath + fileName);
//	            file.transferTo(dest);
            try {
                FileUtil.uploadFile(file.getBytes(), filePath, fileName);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                System.out.println(e);
                return "上传第" + (i++) + "个文件失败";
            }
            System.out.println("第" + (i + 1) + "个文件上传成功");
        }
        return "上传成功";
    }

    @GetMapping("/files")
    @Anonymous
    public Map<String, List<FileVo>> getfiles(){
        List<FileVo> list = new ArrayList<>();
        String path = "E:\\iems";
        File file = new File(path);
        List<HashMap<String,String>> fileList = new ArrayList<>();
        getFile( file.listFiles(), fileList);
        String temp="";
        if(fileList!=null && fileList.size()>0) {
            for (HashMap<String, String> map : fileList) {
                Set<Map.Entry<String, String>> entries = map.entrySet();
                Map<String, Object> m = new HashMap<>();
                for (Map.Entry<String, String> me : entries) {
                    System.out.println("路径:" + me.getKey() + "\t" + "文件名:" + me.getValue());
                    String str = me.getKey();
                    String folder = str.substring(0, str.lastIndexOf("\\"));
                    folder = folder.substring(folder.lastIndexOf("\\") + 1);
                    FileVo vo = new FileVo();
                    if (temp.equals(folder)) {
                        vo.setFolder(temp);
                        vo.setFile(me.getValue());
                    } else {
                        temp = folder;
                        vo.setFolder(temp);
                        vo.setFile(me.getValue());
                    }
                    list.add(vo);
                }
            }
        }
        Map<String, List<FileVo>> pp = list.stream().collect(Collectors.groupingBy(t -> t.getFolder()));
        return pp;
    }

    public static void getFile(File[] files,List<HashMap<String,String>> fileList) {
        for (File f : files) {
            if (f.isDirectory()) {
                getFile(f.listFiles(), fileList);
            } else {
                HashMap<String,String> map = new HashMap<>();
                map.put(f.getAbsolutePath(), f.getName());
                fileList.add(map);
            }
        }
    }

    @Anonymous
    @ApiOperation("下载文件")
    @GetMapping("/downLoadFile")
    public Response downLoadFile(@RequestParam("fileName") String fileName, HttpServletResponse response,
                             HttpServletRequest request) throws UnsupportedEncodingException {
//        String filePath = request.getSession().getServletContext().getRealPath("imgupload/");
        String filePath = "E:\\iems\\";
        System.out.println("fileName:" + fileName);
        System.out.println("----------file download---" + filePath + fileName);
        File file = new File(filePath + fileName);
        if (file.exists()) { // 判断文件父目录是否存在
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            response.setCharacterEncoding("UTF-8");
            response.setHeader("Content-Disposition",
                    "attachment;fileName=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
            byte[] buffer = new byte[1024];
            FileInputStream fis = null; // 文件输入流
            BufferedInputStream bis = null;
            OutputStream os = null; // 输出流
            try {
                os = response.getOutputStream();
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                int i = bis.read(buffer);
                while (i != -1) {
                    os.write(buffer);
                    i = bis.read(buffer);
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    bis.close();
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return Response.ok();
    }

}
package com.green.admin.common.utils.file;

import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileOutputStream;

@Slf4j
public class FileUtil {
    public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
        File targetFile = new File(filePath);
        if(!targetFile.exists()){
            targetFile.mkdirs();
        }
        System.out.println("filePath:"+filePath+fileName);
        FileOutputStream out = new FileOutputStream(filePath+fileName);
        out.write(file);
        out.flush();
        out.close();
    }
}

import lombok.Data;

import java.util.List;

@Data
public class FileListVo {
    private String folder;

    private List<String> files;
}

import lombok.Data;


@Data
public class FileVo {

    private String folder;

    private String file;
}

@Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize(DataSize.ofGigabytes(1));
        factory.setMaxRequestSize(DataSize.ofGigabytes(1));
        return factory.createMultipartConfig();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值