美文网首页
Spring boot 基于ajax 文件上传下载

Spring boot 基于ajax 文件上传下载

作者: 离别刀 | 来源:发表于2018-06-07 22:43 被阅读0次
    8142826.png

    1.配置静态文件访问路径

    @Configuration
    public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
            registry.addResourceHandler("/view/**").addResourceLocations("classpath:/view/");
            super.addResourceHandlers(registry);
        }
    }
    

    2.配置文件上传大小

    @Configuration
    public class BeanConfig {
    
        @Bean
        public MultipartConfigElement init(){
            MultipartConfigFactory factory = new MultipartConfigFactory();
            //文件最大
            factory.setMaxFileSize("102400KB"); //KB,MB
            /// 设置总上传数据总大小
            factory.setMaxRequestSize("102400KB");
            return factory.createMultipartConfig();
        }
    }
    
    

    3.多文件上传接口,下载文件接口

    import com.example.demo.util.FileUploadUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.*;
    
    @RequestMapping("/file")
    @Controller
    public class FileCtrl {
    
        private static final String uploadPath = "D:/Images/";
    
        @Autowired
        private FileUploadUtil fileUploadUtil;
    
        @RequestMapping("/images")
        public String uploadTest() {
            return "images";
        }
    
        @RequestMapping(value = "/upload", method = RequestMethod.POST)
        @ResponseBody
        public List<Map<String, Object>> uploadFile(HttpServletRequest request, @RequestParam MultipartFile[] files) {
            return fileUploadUtil.upload(files, uploadPath);
        }
    
        @RequestMapping("/load")
        public ResponseEntity<byte[]> fileDownLoad(@RequestParam("fileName") String fileName) throws Exception{
            String filePath= uploadPath+fileName;
            InputStream in=new FileInputStream(new File(filePath));
            byte[] body=null;
            body=new byte[in.available()];
            in.read(body);
            fileName=new String(fileName.getBytes("gbk"),"iso8859-1");
            HttpHeaders headers=new HttpHeaders();
            headers.add("Content-Disposition", "attachment;filename="+fileName);
            HttpStatus statusCode = HttpStatus.OK;
            ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body, headers, statusCode);
            return response;
        }
    }
    

    4.文件上传工具类

    import org.apache.commons.io.FileUtils;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.*;
    
    @Component
    public class  FileUploadUtil{
    
        public List<Map<String,Object>> upload(MultipartFile[] fileList,String uploadPath) {
            List<Map<String, Object>> list = new ArrayList<>();
            if (fileList != null) {
                for (MultipartFile file : fileList) {
                    long fileSize = file.getSize();
                    String oriName = file.getOriginalFilename();
                    String newName = UUID.randomUUID() + "." + StringUtils.substringAfterLast(oriName, ".");
                    try {
                        //method1(file,uploadPath,newName);
                        method2(file,uploadPath,newName);
                    } catch (IOException e) {
                        e.printStackTrace();
                        throw new RuntimeException("copyInputStreamToFile error.");
                    }
                    Map<String, Object> res = new HashMap<>();
                    res.put("fileSize", fileSize);
                    res.put("oriName", oriName);
                    res.put("imageName", newName);
                    list.add(res);
                }
            }
            return list;
        }
    
        //基于spring接口文件保存
        private void method1(MultipartFile file,String path,String fileName) throws IOException {
            File localFile = new File(path);
            if (!localFile.exists()) {
                localFile.mkdir();
            }
            file.transferTo(new File(path, fileName));
        }
    
        //基于apache文件保存
        private void method2(MultipartFile file,String path,String fileName) throws IOException {
            FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path, fileName));
        }
    
    }
    
    

    5.文件上传页面

    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8"/>
        <script src="/static/jquery-1.8.3.min.js"></script>
        <script src="/static/ajaxfileupload.js"></script>
    </head>
    <body>
        <input id="upload" type="file" name="files" multiple="multiple" value="上传文件" onchange="fileChange()"/>
        <hr/>
        <div id="images">
            <img src=""/>
        </div>
    </body>
    <script type="text/javascript">
        function fileChange(){
            debugger;
            var fielId= event.target.id;
            $.ajaxFileUpload({
                url:'/file/upload',
                type: 'post',
                secureuri:false,
                fileElementId:fielId,//文件选择框的id属性
                dataType: 'json',   //json
                success: function(res){
                    console.log(res);
                    $(res).each(function(index,data){
                        var image="<img with='300' height='300' src='/file/load?fileName=";
                        image+= data.imageName;
                        image+= "'/>";
                        $("#images").append(image);
                    });
                },
                error:function(XMLHttpRequest, textStatus, errorThrown){
                    alert('上传失败!');
                }
            });
        }
    </script>
    </html>
    

    相关文章

      网友评论

          本文标题:Spring boot 基于ajax 文件上传下载

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