pom.xml添加七牛雲的sdk依賴java
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.27</version>
</dependency>
複製代碼
七牛雲上傳必要的配置有:accessKey、secretKey、bucket 其中accessKey、secretKey在該網址可查看web
bucket爲你的存儲空間名,以下: 微信
upload:
qiniu:
domain: 填你的域名
access-key: 你的accesskey
secret-key: 你的secretKey
bucket: 你的存儲空間名,我這裏爲colablog
複製代碼
能夠看到個人七牛雲上傳配置中有domain
這項配置,這個配置是七牛雲buket的存儲域名,在內容管理下,主要用於上傳文件成功後把文件訪問路徑返還回去。 app
使用SpringBoot的@ConfigurationProperties
和@Component
註解實現上傳的配置類UploadProperties
, 由於上傳配置可能會有本地上傳和雲上傳或者其餘上傳的,因此該配置類我留了擴展點。由於受到了rabbitmq的配置類啓發,並且上傳的配置不會不少,因此用內部類來分割這種配置類。上傳配置類以下:dom
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/** * @author Johnson * @date 2019/12/16/ 09:35:36 */
@Component
@ConfigurationProperties(prefix = "upload")
public class UploadProperties {
private Local local = new Local();
public Local getLocal() {
return local;
}
/** * @author: Johnson * @Date: 2019/12/16 * 本地上傳配置 */
public class Local {
...
}
private Qiniu qiniu = new Qiniu();
public Qiniu getQiniu() {
return qiniu;
}
/** * @author: Johnson * @Date: 2019/12/16 * 七牛雲上傳配置 */
public class Qiniu {
/** * 域名 */
private String domain;
/** * 從下面這個地址中獲取accessKey和secretKey * https://portal.qiniu.com/user/key */
private String accessKey;
private String secretKey;
/** * 存儲空間名 */
private String bucket;
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
}
}
複製代碼
上傳接口以下:maven
public interface UploadFile {
String uploadFile(MultipartFile file);
}
複製代碼
上傳類ide
import cn.colablog.blogserver.utils.properties.UploadProperties;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
/** * @author Johnson * @date 2019/12/14/ 17:20:16 * 上傳文件到七牛雲 */
public class UploadFileQiniu implements UploadFile {
private UploadProperties.Qiniu properties;
//構造一個帶指定Region對象的配置類
private Configuration cfg = new Configuration(Region.region2());
private UploadManager uploadManager= new UploadManager(cfg);
public UploadFileQiniu(UploadProperties.Qiniu properties) {
this.properties = properties;
}
/** * @author: Johnson */
@Override
public String uploadFile(MultipartFile file) {
Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey());
String token = auth.uploadToken(properties.getBucket());
try {
String originalFilename = file.getOriginalFilename();
// 文件後綴
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String fileKey = UUID.randomUUID().toString() + suffix;
Response response = uploadManager.put(file.getInputStream(), fileKey, token, null, null);
return properties.getDomain() + fileKey;
} catch (IOException e) {
e.printStackTrace();
}
return "error";
}
}
複製代碼
Region
配置,這裏表明空間的存取區域,由於個人存儲空間的區域爲華南。因此爲Region.region2()
,查看本身的存儲區域可在空間概覽的最下方查看到,這裏就不截圖了,圖片佔位太大。
Region
對應的設置: this
好了,準備工做已完成,如今就到調用了,調用類以下:spa
@RestController
@RequestMapping("/upload")
public class UploadFileController {
@Autowired
UploadProperties uploadProperties;
@PostMapping("/img")
public String uploadFileYun(MultipartFile file) {
// 上傳到七牛雲
UploadFile uploadFile = new UploadFileQiniu(uploadProperties.getQiniu());
return uploadFile.uploadFile(file);
}
}
複製代碼
是否是很簡單呢?屁啊!簡單個毛線,其實這個我是已經簡化了,實際上在個人項目的結構是比這個複雜的。
一:個人類名都是以Upload
開頭的,類名已經寫死了只有上傳功能,就限制了這個類的可擴展性了,假如添加文件刪除功能,就不該該添加到這個類中。如今已經在重構文件操做(非文件上傳了)的功能模塊了。
二:一開始我以爲文件上傳功能可能使用的比較少,因此使用到的時候纔去實例化文件上傳類,可是這須要根據開發場景來決定,由於個人項目是一個博客後臺管理系統,會常常上傳圖片,因此上傳文件類能夠注入到Spring容器中,這樣也能夠減小實例化的開銷(雖然很小)。注入的話就是用@Component
類註解。
三:配置文件我爲何會想到使用內部類來分割配置項呢?其實你們在編寫一些相似功能的時候,均可以去參照一下別人的源碼,固然,這裏指的是大神的源碼。由於我在寫配置項的時候就想看看大神的配置項是怎麼寫的,就點進了rabbitmq的配置項。因此啊,看到了大神的代碼是真的有長進的。
若是你須要查看更詳細的官方文檔,請點擊下方連接:
最後:感謝你們的閱讀,Thanks♪(・ω・)ノ
我的博客網址: colablog.cn/
若是個人文章幫助到您,能夠關注個人微信公衆號,第一時間分享文章給您