diff --git a/tlias-web-management/pom.xml b/tlias-web-management/pom.xml index c905590..9578b76 100644 --- a/tlias-web-management/pom.xml +++ b/tlias-web-management/pom.xml @@ -45,6 +45,30 @@ pagehelper-spring-boot-starter 1.4.2 + + + + com.aliyun.oss + aliyun-sdk-oss + 3.17.4 + + + javax.xml.bind + jaxb-api + 2.3.1 + + + javax.activation + activation + 1.1.1 + + + + org.glassfish.jaxb + jaxb-runtime + 2.3.3 + + diff --git a/tlias-web-management/src/main/java/com/inmind/controller/UploadController.java b/tlias-web-management/src/main/java/com/inmind/controller/UploadController.java index 019b140..769d986 100644 --- a/tlias-web-management/src/main/java/com/inmind/controller/UploadController.java +++ b/tlias-web-management/src/main/java/com/inmind/controller/UploadController.java @@ -1,7 +1,10 @@ package com.inmind.controller; +import com.aliyuncs.exceptions.ClientException; import com.inmind.pojo.Result; +import com.inmind.utils.AliOSSUtils; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -15,7 +18,10 @@ import java.util.UUID; @Slf4j public class UploadController { - //本文件上传 + @Autowired + private AliOSSUtils aliOSSUtils; + + /* //本文件上传 @PostMapping("/upload") public Result upload(String username, Integer age, MultipartFile image) throws IOException { log.info("文件上传:{},{},{}",username,age,image); @@ -32,5 +38,14 @@ public class UploadController { log.info("保存的文件名:{}",filePath); image.transferTo(new File(filePath)); return Result.success(); + }*/ + + @PostMapping("/upload") + public Result upload( MultipartFile image) throws IOException, ClientException { + log.info("文件上传:{}",image); + //获取到前端上传的文件,使用OSS上传阿里云服务器中,获取阿里云图片的URL + String uploadUrl = aliOSSUtils.upload(image); + log.info("文件上传OSS的URL:{}",uploadUrl); + return Result.success(uploadUrl); } } diff --git a/tlias-web-management/src/main/java/com/inmind/utils/AliOSSUtils.java b/tlias-web-management/src/main/java/com/inmind/utils/AliOSSUtils.java new file mode 100644 index 0000000..c6046f9 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/utils/AliOSSUtils.java @@ -0,0 +1,66 @@ +package com.inmind.utils; + +import com.aliyun.oss.ClientBuilderConfiguration; +import com.aliyun.oss.OSS; +import com.aliyun.oss.OSSClientBuilder; +import com.aliyun.oss.common.auth.CredentialsProviderFactory; +import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider; +import com.aliyun.oss.common.comm.SignVersion; +import com.aliyun.oss.model.PutObjectRequest; +import com.aliyun.oss.model.PutObjectResult; +import com.aliyuncs.exceptions.ClientException; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; +import java.io.*; +import java.util.UUID; + +/** + * 阿里云 OSS 工具类 + */ +@Component +public class AliOSSUtils { + + /*@Value("${aliyun.oss.endpoint}") + private String endpoint; + @Value("${aliyun.oss.bucketName}") + private String bucketName; + @Value("${aliyun.oss.region}") + private String region ;*/ + + private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; + private String bucketName = "inmind-test1"; + private String region = "cn-hangzhou"; + + /** + * 实现上传图片到OSS + */ + public String upload(MultipartFile file) throws IOException, ClientException { + // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 + EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); + // 获取上传的文件的输入流 + InputStream inputStream = file.getInputStream(); + // 避免文件覆盖 + String originalFilename = file.getOriginalFilename(); + String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf(".")); + //上传文件到 OSS + // 创建OSSClient实例。 + ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); + clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); + OSS ossClient = OSSClientBuilder.create() + .endpoint(endpoint) + .credentialsProvider(credentialsProvider) + .clientConfiguration(clientBuilderConfiguration) + .region(region) + .build(); + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream); + PutObjectResult result = ossClient.putObject(putObjectRequest); + //文件访问路径 + String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName; + // 关闭ossClient + ossClient.shutdown(); + return url;// 把上传到oss的路径返回 + } + +} diff --git a/tlias-web-management/src/test/java/com/inmind/Demo.java b/tlias-web-management/src/test/java/com/inmind/Demo.java new file mode 100644 index 0000000..7998b01 --- /dev/null +++ b/tlias-web-management/src/test/java/com/inmind/Demo.java @@ -0,0 +1,65 @@ +package com.inmind; + +import com.aliyun.oss.*; +import com.aliyun.oss.common.auth.*; +import com.aliyun.oss.common.comm.SignVersion; +import com.aliyun.oss.model.PutObjectRequest; +import com.aliyun.oss.model.PutObjectResult; +import java.io.FileInputStream; +import java.io.InputStream; + +public class Demo { + + public static void main(String[] args) throws Exception { + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; + // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 + EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); + // 填写Bucket名称,例如examplebucket。 + String bucketName = "inmind-test1"; + // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 + String objectName = "exampledir/1434.jpg"; + // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。 + // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 +// String filePath= "D:\\localpath\\examplefile.txt"; + String filePath= "C:\\Users\\xuxin\\Desktop\\头像图片\\3.jpg"; + // 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。 + String region = "cn-hangzhou"; + + // 创建OSSClient实例。 + // 当OSSClient实例不再使用时,调用shutdown方法以释放资源。 + ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); + clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); + OSS ossClient = OSSClientBuilder.create() + .endpoint(endpoint) + .credentialsProvider(credentialsProvider) + .clientConfiguration(clientBuilderConfiguration) + .region(region) + .build(); + + try { + //根据本地文件的路径获取IO流 + InputStream inputStream = new FileInputStream(filePath); + // 创建PutObjectRequest对象。 + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); + // 创建PutObject请求。 + PutObjectResult result = ossClient.putObject(putObjectRequest); + } catch (OSSException oe) { + System.out.println("Caught an OSSException, which means your request made it to OSS, " + + "but was rejected with an error response for some reason."); + System.out.println("Error Message:" + oe.getErrorMessage()); + System.out.println("Error Code:" + oe.getErrorCode()); + System.out.println("Request ID:" + oe.getRequestId()); + System.out.println("Host ID:" + oe.getHostId()); + } catch (ClientException ce) { + System.out.println("Caught an ClientException, which means the client encountered " + + "a serious internal problem while trying to communicate with OSS, " + + "such as not being able to access the network."); + System.out.println("Error Message:" + ce.getMessage()); + } finally { + if (ossClient != null) { + ossClient.shutdown(); + } + } + } +} \ No newline at end of file diff --git a/tlias-web-management/src/test/java/com/inmind/TliasWebManagementApplicationTests.java b/tlias-web-management/src/test/java/com/inmind/TliasWebManagementApplicationTests.java index 3004e13..9051b75 100644 --- a/tlias-web-management/src/test/java/com/inmind/TliasWebManagementApplicationTests.java +++ b/tlias-web-management/src/test/java/com/inmind/TliasWebManagementApplicationTests.java @@ -19,4 +19,10 @@ class TliasWebManagementApplicationTests { } } + @Test + void testEnv() { + String ossAccessKeyId = System.getenv("OSS_ACCESS_KEY_ID"); + System.out.println(ossAccessKeyId); + } + }