Merge branch 'feature/admin' into preview

master
Diyu0904 2025-03-11 13:06:36 +08:00
commit 09b3e8f7d2
3 changed files with 70 additions and 15 deletions

View File

@ -11,6 +11,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -43,6 +44,10 @@ public class FileController {
@Autowired @Autowired
private ObsClient obsClient; private ObsClient obsClient;
@Value("${huawei.obs.bucketName}")
private String bucketName;
/*** /***
* *
* *
@ -141,37 +146,40 @@ public class FileController {
/** /**
* *
*/ */
@GetMapping("/getUploadId/{objectKey}") @ApiOperation(value = "启动上传任务")
public String getUploadId(@PathVariable("objectKey")String objectKey) { @GetMapping("/getUploadId")
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest("<桶名称>", objectKey); public R getUploadId(@RequestParam("objectKey")String objectKey) {
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectKey);
ObjectMetadata metadata = new ObjectMetadata(); ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata("property", "property-value"); metadata.addUserMetadata("property", "property-value");
metadata.setContentType("text/plain"); metadata.setContentType("text/plain");
request.setMetadata(metadata); request.setMetadata(metadata);
InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request);
String uploadId = result.getUploadId(); String uploadId = result.getUploadId();
return uploadId; return R.ok(uploadId);
} }
/** /**
* *
*/ */
@ApiOperation(value = "分片上传")
@PostMapping("/chunk") @PostMapping("/chunk")
public Map<String,String> splitFileUpload( public R splitFileUpload(
@RequestParam("objectKey")String objectKey, @RequestParam("objectKey")String objectKey,
@RequestParam("file") MultipartFile file, @RequestParam("file") MultipartFile file,
@RequestParam("chunk") int chunk, @RequestParam("chunk") int chunk,
@RequestParam("uploadId") String uploadId) throws Exception { @RequestParam("uploadId") String uploadId) throws Exception {
File file1 = multipartFileToFile(file); File file1 = multipartFileToFile(file);
Map<String,String> map = uploadChunk(uploadId, file1, chunk, objectKey); Map<String,String> map = uploadChunk(uploadId, file1, chunk, objectKey);
return map; return R.ok(map);
} }
/** /**
* *
*/ */
@ApiOperation(value = "合并上传")
@PostMapping("/completeUpload") @PostMapping("/completeUpload")
public CompleteMultipartUploadResult completeUpload( public R completeUpload(
@RequestParam("objectKey")String objectKey, @RequestParam("objectKey")String objectKey,
@RequestParam("uploadId") String uploadId, @RequestParam("uploadId") String uploadId,
@RequestBody List<Map<String,String>> mapList @RequestBody List<Map<String,String>> mapList
@ -184,27 +192,31 @@ public class FileController {
partEtags.add(part1); partEtags.add(part1);
} }
CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest( CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest(
"<桶名称>", objectKey, uploadId, partEtags); bucketName, objectKey, uploadId, partEtags);
CompleteMultipartUploadResult result = obsClient.completeMultipartUpload(request); CompleteMultipartUploadResult result = obsClient.completeMultipartUpload(request);
return result;
return R.ok(result);
} }
/** /**
* *
*/ */
@ApiOperation(value = "取消任务上传")
@GetMapping("/cancelUpload") @GetMapping("/cancelUpload")
public void cancelUpload( public R cancelUpload(
@RequestParam("objectKey")String objectKey, @RequestParam("objectKey")String objectKey,
@RequestParam("uploadId") String uploadId @RequestParam("uploadId") String uploadId
){ ){
AbortMultipartUploadRequest request = new AbortMultipartUploadRequest("<桶名称>", objectKey, uploadId); AbortMultipartUploadRequest request = new AbortMultipartUploadRequest(bucketName, objectKey, uploadId);
obsClient.abortMultipartUpload(request); obsClient.abortMultipartUpload(request);
return R.ok();
} }
public Map<String,String> uploadChunk(String uploadId, File file,int chunk, String objectKey){ public Map<String,String> uploadChunk(String uploadId, File file,int chunk, String objectKey){
// Endpoint以北京四为例其他地区请按实际情况填写。 // Endpoint以北京四为例其他地区请按实际情况填写。
Map<String,String> map = new HashMap<>(); Map<String,String> map = new HashMap<>();
UploadPartRequest request = new UploadPartRequest("<桶名称>", objectKey); UploadPartRequest request = new UploadPartRequest(bucketName, objectKey);
request.setUploadId(uploadId); request.setUploadId(uploadId);
request.setPartNumber(chunk); request.setPartNumber(chunk);
request.setFile(file); request.setFile(file);
@ -263,4 +275,41 @@ public class FileController {
return fileService.selectHash(hashCode,type); return fileService.selectHash(hashCode,type);
} }
// @PostMapping("/test")
// public R test(@RequestParam File file){
//
// // 创建上传请求
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentLength(file.length());
// InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest(bucketName, file.getName(), metadata);
// InitiateMultipartUploadResult initiateResult = obsClient.initiateMultipartUpload(initiateRequest);
// String uploadId = initiateResult.getUploadId();
//
// // 分片上传
// long partSize = 5 * 1024 * 1024; // 分片大小为5MB
// long filePosition = 0;
// int partNumber = 1;
// while (filePosition < file.length()) {
// long currentPartSize = Math.min(partSize, file.length() - filePosition);
// UploadPartRequest uploadRequest = new UploadPartRequest();
// uploadRequest.setBucketName(bucketName);
// uploadRequest.setObjectKey(file.getName());
// uploadRequest.setUploadId(uploadId);
// uploadRequest.setFile(file);
// uploadRequest.setPartSize(currentPartSize);
// uploadRequest.setPartNumber(partNumber);
// uploadRequest.setPosition(filePosition);
// UploadPartResult uploadResult = obsClient.uploadPart(uploadRequest);
// PartEtag partEtag = new PartEtag(uploadResult.getEtag(), uploadResult.getPartNumber());
// partNumber++;
// filePosition += currentPartSize;
// }
//
// // 完成分片上传
// CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest(bucketName, file.getName(), uploadId);
// obsClient.completeMultipartUpload(completeRequest);
// String key = completeRequest.getObjectKey();
// return R.ok(key);
// }
} }

View File

@ -395,7 +395,7 @@
<version>5.3.25</version> <!-- 请确保与 spring-web 使用相同的主要版本 --> <version>5.3.25</version> <!-- 请确保与 spring-web 使用相同的主要版本 -->
</dependency> </dependency>
<!-- obs文件存储 3.23.5 --> <!-- obs文件存储 3.23.5 3.19.7 -->
<dependency> <dependency>
<groupId>com.huaweicloud</groupId> <groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java</artifactId> <artifactId>esdk-obs-java</artifactId>
@ -408,6 +408,12 @@
<artifactId>spring-boot-starter-websocket</artifactId> <artifactId>spring-boot-starter-websocket</artifactId>
</dependency> </dependency>
</dependencies>
</dependencies>
<repositories>
<repository>
<id>huawei-public</id>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</repository>
</repositories>
</project> </project>

View File

@ -67,7 +67,7 @@ public class ObsUtils {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String url = String url =
now.getYear() + "/" + now.getYear() + "/" +
now.getMonth() + "/" + now.getMonthValue() + "/" +
now.getDayOfMonth() + "/" now.getDayOfMonth() + "/"
+ uuid + "/" + uuid + "/"
+ name; + name;