Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值
Java 封装阿里云 oss 上传图片时抽取配置到 application 使用 @Value 获取值
application .yml 配置
alioss: # 阿里云配置 endpoint: "https://oss-cn-beijing.aliyuncs.com" # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 bucketName: "" # 填写Bucket名称,例如examplebucket。 access_key: "" # 点击头像->Accesskey管理查看 秘钥 access_key_secret: "" # 密码
上传代码
package com.zhong.utils; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectResult; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.InputStream; /** * @ClassName : AliOssUtil * @Description : 阿里云上传服务 * @Author : zhx * @Date: 2024-03-1 20:29 */ @Component public class AliOssUtil { // 抽取配置 private static String ENDPOINT; @Value("${alioss.endpoint}") public void setENDPOINT(String endpoint){ ENDPOINT = endpoint; } private static String ACCESS_KEY; @Value("${alioss.access_key}") public void setAccessKey(String accessKey){ ACCESS_KEY = accessKey; } private static String ACCESS_KEY_SECRET; @Value("${alioss.access_key_secret}") public void setAccessKeySecret(String accessKeySecret){ ACCESS_KEY_SECRET = accessKeySecret; } private static String BUCKETNAME; @Value("${alioss.bucketName}") public void setBUCKETNAME(String bucketName){ BUCKETNAME = bucketName; } // 上传业务 public static String uploadFile(String objectName, InputStream inputStream) { String url = ""; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY, ACCESS_KEY_SECRET); try { // 创建PutObjectRequest对象。 PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, objectName, inputStream); // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上传文件。 PutObjectResult result = ossClient.putObject(putObjectRequest); url = "https://" + BUCKETNAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/") + 1) + "/" + objectName; } 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(); } } return url; } }
程序调用
package com.zhong.controller; import com.zhong.pojo.Result; import com.zhong.utils.AliOssUtil; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.util.UUID; /** * @ClassName : FileUploadController * @Description : 文件上传相关操作 * @Author : zhx * @Date: 2024-03-01 19:45 */ @RestController public class FileUploadController { @PostMapping("/upload") public Result uploadImage(MultipartFile file) throws Exception { // 获取文件原名 String originalFilename = file.getOriginalFilename(); // 防止重复上传文件名重复 String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.indexOf(".")); // 把文件储存到本地磁盘 // file.transferTo(new File("E:\SpringBootBase\ProjectOne\big-event\src\main\resources\flies\" + fileName)); String url = AliOssUtil.uploadFile(fileName, file.getInputStream()); return Result.success(url); } }
The End