springboot專案上傳存盤圖片到七牛云服務器
問題描述:
當圖片存在本地時會出現卡頓的現象,比如一篇圖文混排的文章,如果圖片沒有加載完,可能整個文章都顯示不出來,因為它們都是用的同一個服務器,
但是如果把圖片單獨拿出來放在云服務器上進行加載,這樣圖片的加載和文字的加載互不干擾,就可以優化這個問題,
- 首先要到七牛云官網注冊賬號并登陸
? 這是官網:https://www.qiniu.com/
-
登錄之后在右上角找到【控制臺】選項,第一次進入的話是沒有存盤空間的,所以需要新建一個存盤空間,
-
創建完畢之后,你可以看到下面這樣的界面:

單擊空間名稱可以進入到空間詳情頁面,這里面記錄了存盤空間的詳細資訊,

-
要注意如上圖所示的這幾個地方:- 左上角的名字就是你存盤空間的名字【對應下面 utils 代碼中的 bucket 變數的值,這個值需要改成你自己設定的存盤空間名字】
- 存盤區域需要注意,我選擇的是華北【在 utils 代碼中對應 Configuration cfg = new Configuration(Region.huabei()); 這個部分,需要把Region物件的配置類指定為你選擇的區域】
- 訪問控制需要設定為公開
- 右下角是公開訪問的域名
一、controller
@RestController
@RequestMapping("upload")
public class UploadController {
@Autowired
private QiniuUtils qiniuUtils;
@PostMapping
public Result upload(@RequestParam("image") MultipartFile file){
String fileName = UUID.randomUUID().toString() + "." + StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
boolean upload = qiniuUtils.upload(file, fileName);
if (upload){
return Result.success(QiniuUtils.url + fileName);
}
return Result.fail(7777,"上傳失敗");
}
}
二、utils
@Component
public class QiniuUtils {
public static final String url = "【放你自己的網址】";
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.accessSecretKey}")
private String accessSecretKey;
public boolean upload(MultipartFile file, String fileName){
//構造一個帶指定 Region 物件的配置類
Configuration cfg = new Configuration(Region.huabei());
//...其他引數參考類注釋
UploadManager uploadManager = new UploadManager(cfg);
//...生成上傳憑證,然后準備上傳
String bucket = "【放你自己的存盤空間名】";
//默認不指定key的情況下,以檔案內容的hash值作為檔案名
try {
byte[] uploadBytes = file.getBytes();
Auth auth = Auth.create(accessKey, accessSecretKey);
String upToken = auth.uploadToken(bucket);
Response response = uploadManager.put(uploadBytes, fileName, upToken);
//決議上傳成功的結果
DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
}
三、properties
qiniu.accessKey=[填你的密碼]
qiniu.accessSecretKey=[填你的秘鑰]
# 上面兩個的值在七牛云服務器的空間管理那里找得到
## 上傳檔案總的最大值
spring.servlet.multipart.max-request-size=70MB
## 單個檔案的最大值
spring.servlet.multipart.max-file-size=17MB
秘鑰可以在如下圖的位置獲取:


三、實作流程
簡單說一下實作的程序是怎樣的:
首先由客戶端向服務器發起一個請求,這個檔案的內容被MultipartFile file 作為引數傳遞到controller中,
然后使用下面的方式生成一個新的檔案名
String fileName = UUID.randomUUID().toString() + "." + StringUtils.substringAfterLast(file.getOriginalFilename(), ".");之后把這個檔案名和檔案作為兩個引數傳遞給工具類QiniuUtils
在工具類中的這段代碼需要對應如下圖所示的網址【切記末尾一定要帶斜杠 / 】
public static final String url = "http://+ [下圖所示的那段鏈接] +/";
utils中的這段代碼需要的兩個值,一定要在application.properties中配置上,不然識別不到!
@Value("${qiniu.accessKey}") private String accessKey; @Value("${qiniu.accessSecretKey}") private String accessSecretKey;最后在controller中回傳拼接好的圖片訪問鏈接就大功告成了!
return Result.success(QiniuUtils.url + fileName);
好看請贊,養成習慣 :)
本文來自博客園,作者:靠譜楊,轉載請注明原文鏈接:https://www.cnblogs.com/rainbow-1/p/16441467.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/498487.html
標籤:Java

