diff --git a/esua-epdc/epdc-gateway/src/main/resources/application.yml b/esua-epdc/epdc-gateway/src/main/resources/application.yml index e866953cd..4db66137a 100644 --- a/esua-epdc/epdc-gateway/src/main/resources/application.yml +++ b/esua-epdc/epdc-gateway/src/main/resources/application.yml @@ -181,8 +181,7 @@ renren: - /activiti/editor-app/** - /message/sms/sendCode #发送验证码 - /heart/** - - + - /oss/file/download epdc: diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml index 8bfcd5b93..d1c5e0c34 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/pom.xml @@ -14,7 +14,7 @@ [7.2.0, 7.2.99] - 2.8.3 + 3.5.0 3.2.2 5.4.4 1.26.2 diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/cloud/AliyunCloudStorageService.java b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/cloud/AliyunCloudStorageService.java index eb7b9a92e..dc4682e7d 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/cloud/AliyunCloudStorageService.java +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/cloud/AliyunCloudStorageService.java @@ -1,21 +1,23 @@ /** * Copyright (c) 2018 人人开源 All rights reserved. - * + *

* https://www.renren.io - * + *

* 版权所有,侵权必究! */ package com.elink.esua.epdc.cloud; +import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; -import com.elink.esua.epdc.commons.tools.exception.RenException; -import com.elink.esua.epdc.exception.ModuleErrorCode; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.model.OSSObject; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.exception.ModuleErrorCode; -import java.io.ByteArrayInputStream; -import java.io.InputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; /** * 阿里云存储 @@ -24,7 +26,7 @@ import java.io.InputStream; */ public class AliyunCloudStorageService extends AbstractCloudStorageService { - public AliyunCloudStorageService(CloudStorageConfig config){ + public AliyunCloudStorageService(CloudStorageConfig config) { this.config = config; } @@ -40,7 +42,7 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService { try { client.putObject(config.getAliyunBucketName(), path, inputStream); client.shutdown(); - } catch (Exception e){ + } catch (Exception e) { throw new RenException(ModuleErrorCode.OSS_UPLOAD_FILE_ERROR, e, ""); } @@ -56,4 +58,46 @@ public class AliyunCloudStorageService extends AbstractCloudStorageService { public String uploadSuffix(InputStream inputStream, String suffix) { return upload(inputStream, getPath(config.getAliyunPrefix(), suffix)); } + + /** + * 下载阿里云oss服务器上的文件 + * + * @param url 完整的访问连击 + * @param response + * @return void + * @author work@yujt.net.cn + * @date 2019/10/24 14:43 + */ + public void download(String url, HttpServletResponse response) throws IOException { + + OSS ossClient = new OSSClientBuilder().build(config.getAliyunEndPoint(), config.getAliyunAccessKeyId(), config.getAliyunAccessKeySecret()); + + String objectName = url.replace(config.getAliyunDomain().concat("/"), ""); + String filename = objectName.substring(objectName.lastIndexOf("/") + 1); + // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。 + OSSObject ossObject = ossClient.getObject(config.getAliyunBucketName(), objectName); + // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。 + InputStream content = ossObject.getObjectContent(); + if (null != content) { + response.setCharacterEncoding("UTF-8"); + response.setHeader("Pragma", "No-Cache"); + response.setHeader("Cache-Control", "No-Cache"); + response.setDateHeader("Expires", 0); + response.setContentType("application/msexcel; charset=UTF-8"); + // 设定输出文件头 + response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8")); + + OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); + byte[] buf = new byte[1024]; + + int L; + while ((L = content.read(buf)) != -1) { + toClient.write(buf, 0, L); + } + content.close(); + toClient.flush(); + toClient.close(); + ossClient.shutdown(); + } + } } diff --git a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java index c248c3a61..d8814a698 100644 --- a/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java +++ b/esua-epdc/epdc-module/epdc-oss/epdc-oss-server/src/main/java/com/elink/esua/epdc/controller/OssController.java @@ -8,6 +8,8 @@ package com.elink.esua.epdc.controller; +import com.elink.esua.epdc.cloud.AbstractCloudStorageService; +import com.elink.esua.epdc.cloud.AliyunCloudStorageService; import com.elink.esua.epdc.commons.tools.annotation.LogOperation; import com.elink.esua.epdc.commons.tools.constant.NumConstant; import com.elink.esua.epdc.commons.tools.page.PageData; @@ -33,11 +35,17 @@ import io.swagger.annotations.ApiOperation; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import springfox.documentation.annotations.ApiIgnore; import sun.misc.BASE64Decoder; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URLEncoder; import java.util.Arrays; import java.util.Map; @@ -112,6 +120,25 @@ public class OssController { return ossService.afterUpload(url, file.getSize()); } + /** + * 下载阿里云oss服务器上的文件 + * + * @param url 完整的访问连击 + * @param response 浏览器返回 + * @return void + * @author work@yujt.net.cn + * @date 2019/10/24 14:43 + */ + @GetMapping("download") + public void download(String fileUrl, HttpServletResponse response) throws Exception { + AbstractCloudStorageService build = OssFactory.build(); + if (build instanceof AliyunCloudStorageService) { + AliyunCloudStorageService aliyunCloudStorageService = (AliyunCloudStorageService) build; + aliyunCloudStorageService.download(fileUrl, response); + } + } + + @DeleteMapping @ApiOperation(value = "删除") @LogOperation("删除")