??????? 在java項目中你可能會有以下需求:用戶上傳本地圖片,然后展示在網(wǎng)頁上。本篇文章將使用阿里云oss實現(xiàn)上傳圖片到oss,oss生成url。
一、準(zhǔn)備工作
首先進(jìn)入阿里云,按如下操作
進(jìn)入創(chuàng)建頁面,修改讀寫權(quán)限為公共讀
然后進(jìn)入bucket,創(chuàng)建AccessKey
創(chuàng)建后,保存好AccessKeyID和AccessKey Secret
二、代碼
將以下依賴添加到項目的pom.xml文件中
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
創(chuàng)建一個工具類,用于配置aliyunoss
添加以下代碼:(注意修改)
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 java.io.FileInputStream;
import java.io.InputStream;
public class AliOssUtil {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
private static final String ENPOINT = "地區(qū)";
// 從環(huán)境變量中獲取訪問憑證。運(yùn)行本代碼示例之前,請確保已設(shè)置環(huán)境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
// EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
private static final String ACCESS_KEY_ID="你的ID";
private static final String ACCESS_KEY_SECRT="KEY";
// 填寫B(tài)ucket名稱,例如examplebucket。
private static final String BUCKETNAME = "你的bucket名稱";
public static String uploadFile(String objectName, InputStream in) throws Exception {
// 創(chuàng)建OSSClient實例。
OSS ossClient = new OSSClientBuilder().build(ENPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRT);
String url = "";
try {
// 填寫字符串。
String content = "Hello OSS,你好世界";
// 創(chuàng)建PutObjectRequest對象。
PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, objectName,in);
// 如果需要上傳時設(shè)置存儲類型和訪問權(quán)限,請參考以下示例代碼。
// 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組成:http://bucket名稱.區(qū)域節(jié)點
url = "https://" + BUCKETNAME + "." + ENPOINT.substring(ENPOINT.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;
}
}
然后在控制類中使用
@RestController
public class FileUploadController {
@PostMapping("/upload")
public Result<String> upload(MultipartFile file) throws Exception {
String originalFilename = file.getOriginalFilename();
//保證文件名字唯一,防止文件覆蓋
String filename = UUID.randomUUID().toString()+originalFilename.substring(originalFilename.lastIndexOf("."));
String url = AliOssUtil.uploadFile(filename,file.getInputStream());
return Result.success(url);
}
}
三、測試接口
這里使用apifox進(jìn)行測試
發(fā)送請求后,可以看到圖片已經(jīng)存儲到oss上,并且返回了地址。文章來源:http://www.zghlxwxcb.cn/news/detail-845986.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-845986.html
到了這里,關(guān)于【SpringBoot】-- 實現(xiàn)本地文件/圖片上傳到服務(wù)器生成url地址的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!