SpringMvc文件上传和下载

Scroll Down

1、文件下载

(下载后的文件名字为上传时的文件名字)

@RequestMapping(“/downloadFile/download”)
    public ResponseEntity<byte[]> download(String path,String name){
        //设置http协议头部
        HttpHeaders headers = new HttpHeaders();
        //设置文件名
        String fileName = “”;
        try {
            fileName = new String(name.getBytes(“UTF-8”),”iso-8859-1”);//为了解决中文名称乱码问题
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //头部设置文件类型
        headers.setContentDispositionFormData(“attachment”, fileName);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //获取文件路径
        String targetDirectory = “D:\“ + path;
        File file=new File(targetDirectory);
        //返回文件字节数组
        try {
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
<a href=”/downloadFile/download?path=sdsffsdfds.rar&name=实验工具.rar”>下载</a>

这个path为D:\盘下的一个文件的文件名字,这个文件名字是字母加数字是文件上传的时候随机生成的,然后name为文件下载后的名字,这个名字应该存储到数据库中,是文件上传时的原名字。

2、文件下载

(下载后的名字为随机生成的名字)

@RequestMapping(value=”/download”,method=RequestMethod.GET) //匹配的是href中的download请求
    public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam(“filename”) String filename,
                                           Model model) throws IOException{
        String downloadFilePath=”D:\“;//从我们的上传文件夹中去取

        File file = new File(downloadFilePath+File.separator+filename);//新建一个文件

        HttpHeaders headers = new HttpHeaders();//http头信息

        String downloadFileName = new String(filename.getBytes(“UTF-8”),”iso-8859-1”);//设置编码

        headers.setContentDispositionFormData(“attachment”, downloadFileName);

        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

        //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
    }
<a href=”/download?filename=sdsffsdfds.rar”>下载</a>

这个path为D:\盘下的一个文件的文件名字,这个文件名字是字母加数字是文件上传的时候随机生成的,下载后文件名字就是这个名字

3、文件上传(单个)

@RequestMapping(“uploadone”)
    public String  springUpload(MultipartFile file) throws IllegalStateException, IOException {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyyMMddHHmmss”);
        String ext = FilenameUtils.getExtension(file.getOriginalFilename());//获得文件扩展名
        String filename = dateFormat.format(date) + UUID.randomUUID().toString().replaceAll(“-“, “”)+”.”+ext;
        file.transferTo(new File(“G:\“ + filename));
        System.out.println(“源文件名为:”+file.getOriginalFilename());
        System.out.println(“文件上传后的名字为:”+filename);
        System.out.println(“文件约为:”+file.getSize()/1024/1024+”M”);
        return “success”;
    }
<form action=”/uploadone” method=”post” enctype=”multipart/form-data”>
    <input type=”file” name=”file”>
    <input type=”submit” value=”upload”/>
</form>

4、文件上传(多个)

@RequestMapping(value=”/uploads”,method=RequestMethod.POST)
    private String fildUpload(@RequestParam(value=”file”,required=false) MultipartFile[] file) throws IOException {
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyyMMddHHmmss”);
        for (MultipartFile files:file){
            String ext = FilenameUtils.getExtension(files.getOriginalFilename());//获得文件扩展名
            String filename = dateFormat.format(date) + UUID.randomUUID().toString().replaceAll(“-“, “”)+”.”+ext;
            files.transferTo(new File(“G:\“ + filename));
            System.out.println(“源文件名为:”+files.getOriginalFilename());
            System.out.println(“文件上传后的名字为:”+filename);
            System.out.println(“文件约为:”+files.getSize()/1024/1024+”M”);
        }
        return “success”;
    }
<form name=”Form2” action=”/uploads” method=”post” enctype=”multipart/form-data”>
    <h1>使用spring mvc提供的类的方法上传文件</h1>
    <input type=”file” name=”file” multiple=”multiple”>
    <input type=”submit” value=”upload”/>
</form>