瀏覽代碼

上传优化

Aslee 3 年之前
父節點
當前提交
d96c8c179b

+ 57 - 0
src/main/java/com/caimei/controller/DownloadApi.java

@@ -0,0 +1,57 @@
+package com.caimei.controller;
+
+import com.caimei.service.DownloadService;
+import com.caimei.service.UploadService;
+import com.caimei.utils.OSSUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @author Aslee
+ * @date 2021/5/14
+ */
+@Api(tags = "上传API")
+@Slf4j
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/download")
+public class DownloadApi {
+    private static final Logger logger = LoggerFactory.getLogger(DownloadApi.class);
+    @Value("${caimei.imageDomain}")
+    private String imageDomain;
+    private final DownloadService downloadService;
+
+
+    @ApiOperation("下载文件")
+    @ApiImplicitParam(name = "ossName",value = "oss名称")
+    @GetMapping("/file")
+    public void downloadFile(String ossName,String fileName, HttpServletRequest request, HttpServletResponse response) {
+        try {
+            downloadService.downloadFile(ossName, fileName, request, response);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 1 - 1
src/main/java/com/caimei/controller/FileApi.java

@@ -49,7 +49,7 @@ public class FileApi {
     }
 
     @ApiOperation("添加/编辑文件")
-    @ApiImplicitParam(name = "params", required = false, value = "fileId:文件id;authUserId:供应商用户id;fileTitle:文件标题;fileName:文件名称;filePreviewUrl:文件预览链接;fileDowloadUrl:文件下载链接")
+    @ApiImplicitParam(name = "params", required = false, value = "fileId:文件id;authUserId:供应商用户id;fileTitle:文件标题;fileName:文件名称;filePreviewUrl:文件预览链接;fileDownloadUrl:oss名称")
     @PostMapping("/save")
     public ResponseJson saveFile(@RequestBody String params) {
         JSONObject paramsMap = JSONObject.parseObject(params);

+ 4 - 5
src/main/java/com/caimei/controller/UploadApi.java

@@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -90,13 +92,11 @@ public class UploadApi {
         log.info("开始上传>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         log.info("开始时间" + format.format(new Date()));
-        String previewUrl = OSSUtils.ossUpload(realName + "-preview" + CodeUtil.generateCodeInt(6) + "." + fileType, uploadFile, contentType, null);
-        log.info("中间时间" + format.format(new Date()));
-        String downloadUrl = OSSUtils.ossUpload(realName + "-download" + CodeUtil.generateCodeInt(6) + "." + fileType, uploadFile, contentType, "attachment");
+        String previewUrl = OSSUtils.ossUpload(filePath, uploadFile, contentType, null);
         log.info("结束时间" + format.format(new Date()));
         if (StringUtils.isNotEmpty(previewUrl)) {
             map.put("previewUrl", previewUrl);
-            map.put("downloadUrl", downloadUrl);
+            map.put("downloadUrl", filePath);
             map.put("fileName", fileName);
             map.put("msg", "上传成功");
             logger.info(">>>>>>>>>>>>>>>>文件上传成功:" + previewUrl);
@@ -106,5 +106,4 @@ public class UploadApi {
         }
         return map;
     }
-
 }

+ 1 - 1
src/main/java/com/caimei/controller/VideoApi.java

@@ -49,7 +49,7 @@ public class VideoApi {
     }
 
     @ApiOperation("添加/编辑视频")
-    @ApiImplicitParam(name = "params", required = false, value = "videoId:视频id;authUserId:供应商用户id;videoTitle:视频标题;videoName:视频名称;videoPreviewUrl:视频预览链接;videoDownloadUrl:视频下载链接")
+    @ApiImplicitParam(name = "params", required = false, value = "videoId:视频id;authUserId:供应商用户id;videoTitle:视频标题;videoName:视频名称;videoPreviewUrl:视频预览链接;videoDownloadUrl:oss名称")
     @PostMapping("/save")
     public ResponseJson saveVideo(@RequestBody String params) {
         JSONObject paramsMap = JSONObject.parseObject(params);

+ 1 - 1
src/main/java/com/caimei/model/po/FilePo.java

@@ -36,7 +36,7 @@ public class FilePo {
     private String previewUrl;
 
     /**
-     * 文件下载链接
+     * oss名称
      */
     private String downloadUrl;
 

+ 1 - 1
src/main/java/com/caimei/model/po/VideoPo.java

@@ -36,7 +36,7 @@ public class VideoPo {
     private String previewUrl;
 
     /**
-     * 视频下载链接
+     * oss名称
      */
     private String downloadUrl;
 

+ 1 - 1
src/main/java/com/caimei/model/vo/FileListVo.java

@@ -24,7 +24,7 @@ public class FileListVo {
     @ApiModelProperty("文件预览链接")
     private String filePreviewUrl;
 
-    @ApiModelProperty("文件下载链接")
+    @ApiModelProperty("oss名称")
     private String fileDownloadUrl;
 
     @ApiModelProperty("审核状态:0审核未通过,1审核通过,2待审核")

+ 1 - 1
src/main/java/com/caimei/model/vo/VideoListVo.java

@@ -24,7 +24,7 @@ public class VideoListVo {
     @ApiModelProperty("视频预览链接")
     private String videoPreviewUrl;
 
-    @ApiModelProperty("视频下载链接")
+    @ApiModelProperty("oss名称")
     private String videoDownloadUrl;
 
     @ApiModelProperty("审核状态:0审核未通过,1审核通过,2待审核")

+ 4 - 1
src/main/java/com/caimei/model/vo/WxFileListVo.java

@@ -18,10 +18,13 @@ public class WxFileListVo {
     @ApiModelProperty("文件标题")
     private String fileTitle;
 
+    @ApiModelProperty("文件名称")
+    private String fileName;
+
     @ApiModelProperty("文件预览链接")
     private String filePreviewUrl;
 
-    @ApiModelProperty("文件下载链接")
+    @ApiModelProperty("oss名称")
     private String fileDownloadUrl;
 
     @ApiModelProperty("创建时间")

+ 4 - 1
src/main/java/com/caimei/model/vo/WxVideoListVo.java

@@ -18,10 +18,13 @@ public class WxVideoListVo {
     @ApiModelProperty("视频标题")
     private String videoTitle;
 
+    @ApiModelProperty("视频名称")
+    private String videoName;
+
     @ApiModelProperty("视频预览链接")
     private String videoPreviewUrl;
 
-    @ApiModelProperty("视频下载链接")
+    @ApiModelProperty("oss名称")
     private String videoDownloadUrl;
 
     @ApiModelProperty("创建时间")

+ 22 - 0
src/main/java/com/caimei/service/DownloadService.java

@@ -0,0 +1,22 @@
+package com.caimei.service;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/7/8
+ */
+public interface DownloadService {
+    /**
+     * 下载文件
+     * @param ossName        oss名称
+     * @param fileName       文件名称
+     * @param request
+     * @param response
+     */
+    void downloadFile(String ossName, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException;
+}

+ 4 - 1
src/main/java/com/caimei/service/FileService.java

@@ -5,6 +5,9 @@ import com.caimei.model.vo.FileListVo;
 import com.caimei.model.vo.WxFileListVo;
 import com.github.pagehelper.PageInfo;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * Description
  *
@@ -34,7 +37,7 @@ public interface FileService {
      * @param fileTitle        文件标题
      * @param fileName        文件名称
      * @param filePreviewUrl      文件预览链接
-     * @param fileDownloadUrl       文件下载链接
+     * @param fileDownloadUrl          oss名称
      * @return  ResponseJson
      */
     ResponseJson saveFile(Integer fileId, Integer authUserId, String fileTitle, String fileName, String filePreviewUrl, String fileDownloadUrl);

+ 1 - 1
src/main/java/com/caimei/service/VideoService.java

@@ -34,7 +34,7 @@ public interface VideoService {
      * @param videoTitle        视频标题
      * @param videoName
      * @param videoPreviewUrl             视频预览链接
-     * @param videoDownloadUrl  视频下载链接
+     * @param videoDownloadUrl       oss名称
      * @return  ResponseJson
      */
     ResponseJson saveVideo(Integer videoId, Integer authUserId, String videoTitle, String videoName, String videoPreviewUrl, String videoDownloadUrl);

+ 80 - 0
src/main/java/com/caimei/service/impl/DownloadServiceImpl.java

@@ -0,0 +1,80 @@
+package com.caimei.service.impl;
+
+import com.caimei.mapper.FileMapper;
+import com.caimei.service.DownloadService;
+import com.caimei.utils.OSSUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+
+/**
+ * Description
+ *
+ * @author : Aslee
+ * @date : 2021/7/9
+ */
+@Slf4j
+@Service
+public class DownloadServiceImpl implements DownloadService {
+
+    @Resource
+    private FileMapper fileMapper;
+
+    @Override
+    public void downloadFile(String ossName, String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        OSSUtils.downFile("authFile/", ossName, fileName);
+        download(request, response, fileName);
+    }
+
+    public void download(HttpServletRequest request, HttpServletResponse response, String fileName) throws IOException {
+        File file = new File("./" + fileName);
+        //  文件存在才下载
+        if (file.exists()) {
+            OutputStream out = null;
+            FileInputStream in = null;
+            try {
+                // 1.读取要下载的内容
+                in = new FileInputStream(file);
+
+                // 2. 告诉浏览器下载的方式以及一些设置
+                // 解决文件名乱码问题,获取浏览器类型,转换对应文件名编码格式,IE要求文件名必须是utf-8, firefo要求是iso-8859-1编码
+                String agent = request.getHeader("user-agent");
+                if (agent.contains("FireFox")) {
+                    fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
+                } else {
+                    fileName = URLEncoder.encode(fileName, "UTF-8");
+                }
+                // 设置下载文件的mineType,告诉浏览器下载文件类型
+                String mineType = request.getServletContext().getMimeType(fileName);
+                response.setContentType(mineType);
+                // 设置一个响应头,无论是否被浏览器解析,都下载
+                response.setHeader("Content-disposition", "attachment; filename=" + fileName);
+                // 将要下载的文件内容通过输出流写到浏览器
+                out = response.getOutputStream();
+                int len = 0;
+                byte[] buffer = new byte[1024];
+                while ((len = in.read(buffer)) > 0) {
+                    out.write(buffer, 0, len);
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            } finally {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+                file.delete();
+            }
+        }
+    }
+}

+ 2 - 0
src/main/java/com/caimei/service/impl/FileServiceImpl.java

@@ -14,6 +14,8 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Date;
 import java.util.List;
 

+ 3 - 2
src/main/java/com/caimei/utils/OSSUtils.java

@@ -202,11 +202,12 @@ public class OSSUtils {
     /**
      * oss单个文件下载
      */
-    public static void downFile(String ossName, String fileName) {
+    public static void downFile(String path, String ossName, String fileName) {
         // 创建OSSClient实例。
         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
         // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
-        ossClient.getObject(new GetObjectRequest(privateBucket, ossName), new File("./" + fileName));
+        String filePath = active + "/" + path + ossName;
+        ossClient.getObject(new GetObjectRequest(privateBucket, filePath), new File("./" + fileName));
         // 关闭OSSClient。
         ossClient.shutdown();
     }

+ 14 - 0
src/main/resources/backup.sql

@@ -205,4 +205,18 @@ ALTER TABLE `cm_brand_auth_user`
 
 insert into weixin.menu_tree (`id`,`parentId`,`parentIds`,`name`,`sort`,`wxType`) values (4,0,'0,','上海品辉公众号','10','gh_j3jf92jladsl');
 # ==================================正品联盟7月优化end===============================================
+# ==================================正品联盟文件上传下载优化start===============================================
+ALTER TABLE `cm_brand_file`
+    CHANGE COLUMN `downloadUrl` `downloadUrl` VARCHAR(300) NULL DEFAULT NULL COMMENT 'oss名称';
+
+ALTER TABLE `cm_brand_video`
+    CHANGE COLUMN `downloadUrl` `downloadUrl` VARCHAR(300) NULL DEFAULT NULL COMMENT 'oss名称';
+
+UPDATE `cm_brand_video` SET `downloadUrl` = '路创丽-preview698384.mp4' WHERE (`id` = '2');
+UPDATE `cm_brand_video` SET `downloadUrl` = '9fd29234d5b62c8c9e68b40abef78d5e-preview396856.mp4' WHERE (`id` = '1');
+UPDATE `cm_brand_file` SET `downloadUrl` = 'BTL美缇斯-preview856568.pdf' WHERE (`id` = '1');
+UPDATE `cm_brand_file` SET `downloadUrl` = '采美365网宣传手册-preview583565.pdf' WHERE (`id` = '2');
+
+# ==================================正品联盟文件上传下载优化end===============================================
+
 

+ 1 - 1
src/main/resources/config/dev/application-dev.yml

@@ -51,7 +51,7 @@ logging:
 
 # swagger文档显示配置
 swagger:
-  enabled: true
+  enabled: false
 
 # 新旧www服务域名
 caimei:

+ 2 - 1
src/main/resources/mapper/FileMapper.xml

@@ -80,7 +80,8 @@
         </choose>
     </select>
     <select id="getWxFileList" resultType="com.caimei.model.vo.WxFileListVo">
-        select id as fileId, title as fileTitle, previewUrl as filePreviewUrl, downloadUrl as fileDownloadUrl, date_format(createTime, '%Y-%m-%d') as createTime
+        select id as fileId, title as fileTitle,name as fileName, previewUrl as filePreviewUrl, downloadUrl as
+        fileDownloadUrl, date_format(createTime, '%Y-%m-%d') as createTime
         from cm_brand_file a
         where authUserId = #{authUserId}
         and status = 1

+ 2 - 1
src/main/resources/mapper/VideoMapper.xml

@@ -80,7 +80,8 @@
         </choose>
     </select>
     <select id="getWxVideoList" resultType="com.caimei.model.vo.WxVideoListVo">
-        select id as videoId, title as videoTitle, previewUrl as videoPreviewUrl, downloadUrl as videoDownloadUrl, date_format(createTime, '%Y-%m-%d') as createTime
+        select id as videoId, title as videoTitle,name as videoName, previewUrl as videoPreviewUrl, downloadUrl as
+        videoDownloadUrl, date_format(createTime, '%Y-%m-%d') as createTime
         from cm_brand_video a
         where authUserId = #{authUserId}
         and status = 1