美文网首页
spring 上传下载文件

spring 上传下载文件

作者: 草祭木初 | 来源:发表于2018-01-28 13:20 被阅读0次

记录一下spring 上传下载文件的简单实现

上代码

controller

@RestController
@RequestMapping("/file")
public class FileUploadService {

    /**
     * 使用MultipartFile上传文件
     */
    @RequestMapping("/upload")
    public String fileUpload(
            @RequestParam(value = "file", required = false) MultipartFile file,
            HttpServletRequest request) {
        // 这个是项目所在的目录
        String path = request.getSession().getServletContext()
                .getRealPath("upload");
        System.out.println(path);
        String fileName = file.getOriginalFilename();
        File targetFile = new File(path, fileName);
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }
        // 保存
        try {
            file.transferTo(targetFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "view/success";
    }

    
    @RequestMapping("download")
    public ResponseEntity<byte[]> download(@RequestParam("fileName") String fileName,HttpServletRequest request)
            throws IOException {
        String path = request.getSession().getServletContext()
                .getRealPath("upload");
        // @RequestParam("fileName") 是utf-8编码的 在tomcat的server.xml里设定
        //<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" 
        //      useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
        File file = new File(path+"/"+fileName);
        
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        
        // 这个是用来下载时的文件名
        String dfileName = new String(fileName.getBytes("UTF-8"), "iso8859-1");
        headers.setContentDispositionFormData("attachment", dfileName);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
                headers, HttpStatus.CREATED);
    }

}

需要如下的spring 配置,我用的是java文件配置的方式

@Configuration
@ComponentScan(basePackages = {"business.**.services"},
    excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class)})
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    
    @Bean(name="multipartResolver") 
    public CommonsMultipartResolver multipartResolver() {
        System.out.println("multipartResolver");
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setMaxInMemorySize(40960);
        resolver.setMaxUploadSizePerFile(10485760000l);
        resolver.setDefaultEncoding("UTF-8");
        return resolver;
    }
   
//其他省略
}

页面

    <div>
        <form id="form0" action="/xufei2/file/upload" method="post" enctype="multipart/form-data">
            <input id="file" name="file" type="file"/>
            <input id="upload" type="button" value="upload">
        </form>
    </div>
    <div>
        <a href="file/download?fileName=文件1.PNG">下载</a>
   
    </div>

上传时 如果用form的话 将button改一下就好

<input id="upload" type="submit" value="upload">

如果用js的话 像下面这么写

    function upload() {
        if ($("#file").length == 0) return;
        //如果不想直接用form 可以这么写
        //var data = new FormData();
        //data.append("file",$("#file")[0].files[0]);
        $.ajax({
            url:'file/upload'
            ,type:'POST'
            ,data:new FormData($("#form0")[0])//直接用form
            ,cache : false
            ,processData : false
            ,contentType : false
            ,dataType:"json"//返回值
            ,success:function(ret){
                console.log("upload success")
            }
            ,error:function(ret){
                console.log("upload error")
                if (ret.status == 401) {
                    location = '/xufei2/index.html'
                }
            }
        })
    }

这里有个注意点 contentType一定要这样设置 否则会报错

contentType : false

上面的实现用到了两个jar
commons-fileupload-1.33.jar
commons-io-2.2.jar

maven这样

    <dependency>  
        <groupId>commons-fileupload</groupId>  
        <artifactId>commons-fileupload</artifactId>  
        <version>1.3.3</version>  
    </dependency>

相关文章

网友评论

      本文标题:spring 上传下载文件

      本文链接:https://www.haomeiwen.com/subject/cowaaxtx.html