Springboot 文件上传下载

作者: 织梦少年666 | 来源:发表于2018-10-15 16:55 被阅读21次

    做一个app更新的文件管理中心

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.dalaoyang</groupId>
        <artifactId>springboot_upload_download</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springboot_upload_download</name>
        <description>springboot_upload_download</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>net.sourceforge.nekohtml</groupId>
                <artifactId>nekohtml</artifactId>
                <version>1.9.15</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    
    package com.source.controller;
    
    import com.source.entity.ApkUpdate;
    import com.source.service.ApkUpdateService;
    import com.source.utils.DateUtil;
    import com.source.utils.SysConfig;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.*;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    
    /**
     * @author source
     * @Description
     * @project springboot_learn
     * @package com.source.controller
     * @email yangyang@source.cn
     * @date 2018/4/9
     */
    @Slf4j
    @RestController
    public class FileController {
    
        @Autowired
        private ApkUpdateService apkUpdateService;
    
        @RequestMapping(value = "/upload")
        public String upload(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
            try {
                if (file.isEmpty()) {
                    return "文件为空";
                }
                // 获取文件名
                String fileName = file.getOriginalFilename();
                fileName = String.valueOf(System.currentTimeMillis())+fileName.substring(fileName.lastIndexOf("."),fileName.length());
                log.info("上传的文件名为:" + fileName);
                //设置文件存储路径
                String filePath = SysConfig.UPLOADPATH;
                String path = filePath + fileName;
                String ServerUrl = request.getServerName()+":"+request.getServerPort()+"/download?fileName=";
                File dest = new File(path);
                // 检测是否存在目录
                if (!dest.getParentFile().exists()) {
                    dest.getParentFile().mkdirs();// 新建文件夹
                }
                file.transferTo(dest);// 文件写入
                Map parameterMap = getParameterMap(request);
                ApkUpdate apkUpdate = new ApkUpdate();
                apkUpdate.setProjectId(Integer.parseInt(parameterMap.get("projectId").toString()));
                apkUpdate.setVersionCode(Integer.parseInt(parameterMap.get("versionCode").toString()));
                apkUpdate.setVersionName(parameterMap.get("versionName").toString());
                apkUpdate.setRemark(parameterMap.get("versionName").toString());
                apkUpdate.setAddress(ServerUrl+fileName);
                apkUpdate.setStates(1);
                apkUpdate.setCounts(0);
                apkUpdate.setReleaseTime(DateUtil.getDateTime());
                apkUpdateService.insertApkUpdate(apkUpdate);
                return "上传成功";
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "上传失败";
        }
    
        @PostMapping("/batch")
        public String handleFileUpload(HttpServletRequest request) {
            List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
            MultipartFile file = null;
            BufferedOutputStream stream = null;
            for (int i = 0; i < files.size(); ++i) {
                file = files.get(i);
                String filePath = SysConfig.UPLOADPATH;
                if (!file.isEmpty()) {
                    try {
                        byte[] bytes = file.getBytes();
                        stream = new BufferedOutputStream(new FileOutputStream(
                                new File(filePath + file.getOriginalFilename())));//设置文件路径及名字
                        stream.write(bytes);// 写入
                        stream.close();
                    } catch (Exception e) {
                        stream = null;
                        return "第 " + i + " 个文件上传失败 ==> "
                                + e.getMessage();
                    }
                } else {
                    return "第 " + i
                            + " 个文件上传失败因为文件为空";
                }
            }
            return "上传成功";
        }
    
        @GetMapping("/download")
        public String downloadFile(HttpServletRequest request, HttpServletResponse response) {
            String fileName = request.getParameter("fileName");// 文件名
            if (fileName != null) {
                //设置文件路径
                File file = new File(SysConfig.UPLOADPATH+fileName);
                //File file = new File(realPath , fileName);
                if (file.exists()) {
                    response.setContentType("application/force-download");// 设置强制下载不打开
                    response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
                    byte[] buffer = new byte[1024];
                    FileInputStream fis = null;
                    BufferedInputStream bis = null;
                    try {
                        fis = new FileInputStream(file);
                        bis = new BufferedInputStream(fis);
                        OutputStream os = response.getOutputStream();
                        int i = bis.read(buffer);
                        while (i != -1) {
                            os.write(buffer, 0, i);
                            i = bis.read(buffer);
                        }
                        return "下载成功";
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        if (bis != null) {
                            try {
                                bis.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        if (fis != null) {
                            try {
                                fis.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            return "下载失败";
        }
    
       /**
         * 从request中获得参数Map,并返回可读的Map
         *
         * @param request
         * @return
         */
        public static Map getParameterMap(HttpServletRequest request) {
            // 参数Map
            Map properties = request.getParameterMap();
            // 返回值Map
            Map returnMap = new HashMap();
            Iterator entries = properties.entrySet().iterator();
            Map.Entry entry;
            String name = "";
            String value = "";
            while (entries.hasNext()) {
                entry = (Map.Entry) entries.next();
                name = (String) entry.getKey();
                Object valueObj = entry.getValue();
                if(null == valueObj){
                    value = "";
                }else if(valueObj instanceof String[]){
                    String[] values = (String[])valueObj;
                    for(int i=0;i<values.length;i++){
                        value = values[i] + ",";
                    }
                    value = value.substring(0, value.length()-1);
                }else{
                    value = valueObj.toString();
                }
                returnMap.put(name, value);
            }
            return returnMap;
        }
    
    }
    

    相关文章

      网友评论

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

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