Java使用OSS實現上傳檔案
阿新 • • 發佈:2021-10-02
Java使用OSS實現上傳檔案
配置Nginx
阿里雲OSS使用
1.準備OSS
- 訪問阿里雲官網,註冊並登入賬戶(支付寶方便一些,順便衝點錢)
- 在產品分類中,找到阿里雲oss
- 然後建立一個bucket
2.使用OSS(上傳檔案)
2.1在阿里雲網站匯出阿里雲頒發的 id 和 祕鑰
2.2匯入maven座標
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.1.0</version> </dependency>
2.3進入阿里雲oss的學習路徑,找到對應java操作的程式碼
2.3.1首先建立配置檔案,將祕鑰等資訊進行配置
#服務埠 server.port=8002 #服務名 spring.application.name=service-oss #環境設定:dev、test、prod spring.profiles.active=dev #阿里雲 OSS #不同的伺服器,地址不同 aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com aliyun.oss.file.keyid=自己的keyid aliyun.oss.file.keysecret=自己的keysecret #bucket可以在控制檯建立,也可以使用java程式碼建立 aliyun.oss.file.bucketname=自己建立的bucket名字
2.3.2建立一個工具類,將配置的屬性注入到容器中
package com.gyb.eduoss.utils; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @Author: 郜宇博 * @Date: 2021/9/30 14:54 */ @Component @ConfigurationProperties(prefix = "aliyun.oss.file") @Data public class AliyunOSSProUtil { private String endpoint; private String keyid; private String keysecret; private String bucketname; }
2.3.3編寫java實現類程式碼(檔案上傳)
package com.gyb.eduoss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.gyb.eduoss.service.OssService;
import com.gyb.eduoss.utils.AliyunOSSProUtil;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
/**
* @Author: 郜宇博
* @Date: 2021/9/30 15:53
*/
@Service
public class OssServiceImpl implements OssService {
@Autowired
AliyunOSSProUtil aliyunOSSProUtil;
@Override
public String uploadFileAvatar(MultipartFile multipartFile) {
//從工具類獲取配置檔案中的oss值
String endpoint = aliyunOSSProUtil.getEndpoint();
String accessKeyId = aliyunOSSProUtil.getKeyid();
String accessKeySecret = aliyunOSSProUtil.getKeysecret();
String bucketName = aliyunOSSProUtil.getBucketname();
System.out.println("endponit:"+endpoint);
// 建立OSSClient例項。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填寫本地檔案的完整路徑。
// 如果未指定本地路徑,則預設從示例程式所屬專案對應本地路徑中上傳檔案流。
InputStream inputStream;
try {
inputStream = multipartFile.getInputStream();
//引數一:依次填寫Bucket名稱
// 引數二:檔名稱,或Object完整路徑(例如exampledir/exampleobject.txt)。Object完整路徑中不能包含Bucket名稱。
// 引數三:輸入流
String currentTime = String.valueOf(System.currentTimeMillis());
String currentDate = new DateTime().toString("yyyy/MM/dd");
String originalFileName = multipartFile.getOriginalFilename();
String fileName = currentDate+"/"+currentTime+originalFileName;
ossClient.putObject(bucketName,fileName, inputStream);
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
} catch (IOException e) {
e.printStackTrace();
}finally {
// 關閉OSSClient。
ossClient.shutdown();
}
return null;
}
}
2.3.4建立config類,防止傳入檔案為null
package com.gyb.eduoss.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
/**
* @Author: 郜宇博
* @Date: 2021/10/2 00:21
*/
@Configuration
public class UploadConfig {
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
//resolveLazily屬性啟用是為了推遲檔案解析,以在在UploadAction中捕獲檔案大小異常
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
//上傳檔案大小 5M 5*1024*1024
resolver.setMaxUploadSize(5 * 1024 * 1024);
return resolver;
}
}
3.配置Nginx反向代理(可以不配)
下載Nginx
實現將對應訪問地址進行正則匹配轉發
3.1將監聽埠改為81(防止衝突)
3.2配置轉發列表
server {
listen 9001;
server_name localhost;
#代表帶有eduservice路徑的請求都走http://localhost:8001
location ~ /eduservice/ {
proxy_pass http://localhost:8001;
}
#代表帶有eduoss的請求都走http://localhost:8002
location ~ /eduoss/ {
proxy_pass http://localhost:8002;
}
}
4.結果
此時將前端的訪問介面改為9001,即可實現下圖功能
從而實現功能不同的請求訪問不同的伺服器