add(req-2119):下载接口优化

This commit is contained in:
胡朝飞 2024-03-07 14:12:58 +08:00
parent ca8cbcd379
commit 692a0c1e4b
5 changed files with 30 additions and 37 deletions

View File

@ -14,12 +14,16 @@ import cn.axzo.oss.manager.api.dto.response.ServerFileDownloadResponse;
import cn.axzo.oss.service.api.FileService;
import cn.azxo.framework.common.model.CommonResponse;
import cn.hutool.json.JSONUtil;
import feign.Response;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
/**
@ -94,19 +98,4 @@ public class ServerFileController implements ServerFileServiceApi {
FindFileKeyDto dto = BeanConvertUtil.copyBean(request, FindFileKeyDto.class);
return CommonResponse.success(BeanConverter.convert(fileService.findFileKey(dto), FindFileKeyResponse.class));
}
/**
* 从华为云上下载文件
*
* @param request DownloadFileFromObsRequest
* @return DownloadFileFromObsResponse
*/
@Override
public CommonResponse<DownloadFileFromObsResponse> downloadFileFromOBS(@Valid @RequestBody DownloadFileFromObsRequest request) {
ServerFileDownloadDto serverFileDownloadDto = BeanConvertUtil.copyBean(request, ServerFileDownloadDto.class);
ServerFileDownloadResponse res = fileService.getObject(serverFileDownloadDto, request.getFileDownloadType());
DownloadFileFromObsResponse result = BeanConverter.convert(res, DownloadFileFromObsResponse.class);
result.setFileStream(res.getFileStream());
return CommonResponse.success(result);
}
}

View File

@ -11,6 +11,7 @@ import cn.axzo.oss.common.enums.FileUploadTypeEnum;
import cn.axzo.oss.common.enums.StorageUnitEnum;
import cn.axzo.oss.common.exception.BizException;
import cn.axzo.oss.common.utils.BeanConvertUtil;
import cn.axzo.oss.http.model.DownloadFileFromObsRequest;
import cn.axzo.oss.http.model.WebFileUploadVo;
import cn.axzo.oss.manager.api.dto.request.*;
import cn.axzo.oss.manager.api.dto.response.*;
@ -310,20 +311,18 @@ public class WebFileController {
}
@SneakyThrows
@GetMapping("/v1/obs/testDownload")
@GetMapping("/v1/obs/downloadFileFromObs")
@CrossOrigin
public void testDownload(@Valid ServerFileDownloadDto dto, HttpServletResponse response) {
public void downloadFileFromObs(@Valid DownloadFileFromObsRequest req, HttpServletResponse response) {
ServerFileDownloadDto dto = new ServerFileDownloadDto();
dto.setFileKey(req.getFileKey());
ServerFileDownloadResponse result = fileService.getObject(dto, FileDownloadTypeEnum.STREAM_DOWNLOAD.getCode());
try (InputStream inputStream = result.getFileStream()) {
FileOutputStream fileOutputStream = new FileOutputStream("/Users/axzo/Desktop/" + result.getFileName());
byte[] buffer = new byte[1024];
int byteRead;
while ((byteRead = inputStream.read(buffer, 0, 1024)) != -1) {
fileOutputStream.write(buffer, 0, byteRead);
}
fileOutputStream.close();
try (OutputStream outputStream = response.getOutputStream(); InputStream inputStream = result.getFileStream()) {
response.setContentType("image/jpg");
response.setCharacterEncoding("UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ result.getFileName() + "." + result.getFileFormat());
IOUtils.copy(inputStream, outputStream);
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -35,6 +35,11 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.oss</groupId>
<artifactId>oss-service</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -3,9 +3,13 @@ package cn.axzo.oss.http.api;
import cn.axzo.oss.http.model.*;
import cn.azxo.framework.common.model.CommonResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
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.RequestMethod;
import feign.Response;
import java.util.List;
/**
@ -57,13 +61,4 @@ public interface ServerFileServiceApi {
*/
@RequestMapping(value = "api/v1/server/getFileKey", method = RequestMethod.POST)
CommonResponse<List<FindFileKeyResponse>> getFileKey(FindFileKeyRequest request);
/**
* 从华为云上下载文件
*
* @param request DownloadFileFromObsRequest
* @return DownloadFileFromObsResponse
*/
@RequestMapping(value = "api/v1/server/downloadFileFromOBS", method = RequestMethod.POST)
CommonResponse<DownloadFileFromObsResponse> downloadFileFromOBS(DownloadFileFromObsRequest request);
}

View File

@ -1,11 +1,13 @@
package cn.axzo.oss.http.api;
import cn.axzo.oss.http.model.DownloadFileFromObsRequest;
import cn.axzo.oss.http.model.DownloadFileFromObsResponse;
import cn.axzo.oss.http.model.WebFileUploadVo;
import cn.azxo.framework.common.model.CommonResponse;
import feign.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
@ -35,4 +37,7 @@ public interface WebFileServiceApi {
CommonResponse<WebFileUploadVo> uploadObs(@Valid @RequestParam("appCode") String appCode,
@Valid @RequestParam("bizScene") String bizScene,
@Valid @RequestPart MultipartFile file);
@PostMapping(value = "/webApi/v1/obs/downloadFileFromObs", consumes = MediaType.APPLICATION_PROBLEM_JSON_VALUE)
CommonResponse<Response> downloadFileFromObs(@Valid @RequestBody DownloadFileFromObsRequest req);
}