From 08c75b8908c0af48dfa52005dd246bfc6e2c2b24 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Mon, 13 Oct 2025 11:12:18 +0800 Subject: [PATCH] =?UTF-8?q?tlias=E7=AE=A1=E7=90=86=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0&OSS=E5=B7=A5=E5=85=B7=E7=B1=BB=E6=8A=BD=E5=8F=96?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tlias-web-management/pom.xml | 23 +++++++ .../inmind/controller/UploadController.java | 49 +++++++++++++++ .../java/com/inmind/utils/AliOSSUtils.java | 51 +++++++++++++++ .../src/main/resources/application.properties | 6 +- .../src/main/resources/static/upload.html | 17 +++++ .../src/test/java/com/inmind/Demo.java | 63 +++++++++++++++++++ .../TliasWebManagementApplicationTests.java | 16 +++++ 7 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 tlias-web-management/src/main/java/com/inmind/controller/UploadController.java create mode 100644 tlias-web-management/src/main/java/com/inmind/utils/AliOSSUtils.java create mode 100644 tlias-web-management/src/main/resources/static/upload.html create mode 100644 tlias-web-management/src/test/java/com/inmind/Demo.java diff --git a/tlias-web-management/pom.xml b/tlias-web-management/pom.xml index 589b6e5..68609e8 100644 --- a/tlias-web-management/pom.xml +++ b/tlias-web-management/pom.xml @@ -46,6 +46,29 @@ 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 new file mode 100644 index 0000000..e8bc0f3 --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/controller/UploadController.java @@ -0,0 +1,49 @@ +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.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +@Slf4j +@RestController +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); + //中.国.梦.txt + String name = image.getOriginalFilename(); + int index = name.lastIndexOf("."); + String extname = name.substring(index); + String fileName = UUID.randomUUID().toString()+extname;//9bc01854-9b25-499c-9e40-0bf4055cbcbd.txt 9bc01854-9b25-499c-9e40-0bf4055cbcbd.jpg + File file = new File("D:\\upload_images\\"+fileName); + //将文件保存在本地服务的目录下D:/upload_images/1.txt + image.transferTo(file); + return Result.success(); + }*/ + + + @PostMapping("/upload") + public Result upload(MultipartFile image) throws IOException, ClientException { + //中.国.梦.txt + String name = image.getOriginalFilename(); + log.info("文件上传:文件名:{}",name); + //调用阿里云OSS功能,提交图片到云端 + String url = aliOSSUtils.upload(image); + return Result.success(url); + } +} 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..84b49ea --- /dev/null +++ b/tlias-web-management/src/main/java/com/inmind/utils/AliOSSUtils.java @@ -0,0 +1,51 @@ +package com.inmind.utils; + +import com.aliyun.oss.*; +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.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.UUID; + +@Component +public class AliOSSUtils { + // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 + private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; + private String bucketName = "inmind-test1"; + private String region = "cn-hangzhou"; + + public String upload(MultipartFile file) throws IOException, ClientException { + EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); + //要使用uuid更换掉文件名,避免同名问题 + String filename = file.getOriginalFilename();//1.jpg 2.txt + int index = filename.lastIndexOf("."); + String extname = filename.substring(index); + String objectName = UUID.randomUUID().toString()+extname; + //地图片要修改为动态的文件上传的图片 + //获取上传文件的输入流 + InputStream inputStream = file.getInputStream(); + ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); + clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); + OSS ossClient = OSSClientBuilder.create() + .endpoint(endpoint) + .credentialsProvider(credentialsProvider) + .clientConfiguration(clientBuilderConfiguration) + .region(region) + .build(); + PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); + PutObjectResult result = ossClient.putObject(putObjectRequest); + ossClient.shutdown(); + //组装文件访问路径 + String url = endpoint.split("//")[0]+"//"+bucketName+"."+endpoint.split("//")[1]+"/"+objectName;//https://inmind-test1.oss-cn-hangzhou.aliyuncs.com/1.jpg + return url; + } +} diff --git a/tlias-web-management/src/main/resources/application.properties b/tlias-web-management/src/main/resources/application.properties index 8a828e9..d0427e3 100644 --- a/tlias-web-management/src/main/resources/application.properties +++ b/tlias-web-management/src/main/resources/application.properties @@ -19,4 +19,8 @@ spring.datasource.password=1234 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #开启mybatis的驼峰命名自动映射开关,将a_time ---->aTime -mybatis.configuration.map-underscore-to-camel-case=true \ No newline at end of file +mybatis.configuration.map-underscore-to-camel-case=true + +#文件上传大小配置 +spring.servlet.multipart.max-file-size= 10MB +spring.servlet.multipart.max-request-size=100MB \ No newline at end of file diff --git a/tlias-web-management/src/main/resources/static/upload.html b/tlias-web-management/src/main/resources/static/upload.html new file mode 100644 index 0000000..fa34d87 --- /dev/null +++ b/tlias-web-management/src/main/resources/static/upload.html @@ -0,0 +1,17 @@ + + + + + 上传文件 + + + +
+ 姓名:
+ 年龄:
+ 头像:
+ +
+ + + 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..d3251d8 --- /dev/null +++ b/tlias-web-management/src/test/java/com/inmind/Demo.java @@ -0,0 +1,63 @@ +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/444.jpg"; + // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。 + // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 + String filePath= "D:\\upload_images\\4.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 { + 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 b706f20..7681695 100644 --- a/tlias-web-management/src/test/java/com/inmind/TliasWebManagementApplicationTests.java +++ b/tlias-web-management/src/test/java/com/inmind/TliasWebManagementApplicationTests.java @@ -3,6 +3,8 @@ package com.inmind; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; +import java.util.UUID; + @SpringBootTest class TliasWebManagementApplicationTests { @@ -10,4 +12,18 @@ class TliasWebManagementApplicationTests { void contextLoads() { } + @Test + void testUuid(){ + for (int i = 0; i < 1000; i++) { + String uuid = UUID.randomUUID().toString(); + System.out.println(uuid); + } + } + + @Test + void testOss(){ + String ossAccessKeyId = System.getenv("OSS_ACCESS_KEY_ID"); + System.out.println(ossAccessKeyId); + } + }