當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用自己電腦做文件存儲,我想沒誰愿意了吧,來來和我一起白嫖吧,伙伴們!!!😁
七牛云:也是一個對象存儲的云網(wǎng)站,當時用它是因為可以每次白嫖10個G的使用一個月,用完可以新開空間,接著用。如果有自己的域名的話,可以一直用。也可以省自己電腦內(nèi)存捂臉(😂)
很喜歡一句話:”八小時內(nèi)謀生活,八小時外謀發(fā)展“
我們:"待別日相見時,都已有所成”
放張圖片先舒緩下心情啦
SpringBoot集成七牛云-實現(xiàn)文件上傳、下載、解決報錯、詳細案例
- 一、背景
- 二、具體步驟
- 2.1、工程目錄
- 2.2、導入依賴
- 2.3、yaml配置文件
- 2.4、綁定配置文件
- 2.5、生成唯一圖片名稱的工具類
- 2.6、UploadImageService
- 2.7、UploadImageServiceImpl
- 2.8、UploadController
- 2.9、測試頁面
- 2.10、測試圖片
- 三、自言自語
一、背景
確實是每月10G,親測有效。😁 (我不是推廣人員,只是感覺平時寫什么小Demo,寫個作業(yè)啥的,用起來挺爽的。)
在網(wǎng)上找了一圈,都沒有看到一個能夠跑動的案例,要么太久遠,要么就實現(xiàn)不了。最后實在沒法去找了學長,他給我發(fā)了一份文檔,才算學會。
我當時的功能需求:希望上傳一張圖片,然后能夠返回這個圖片的外鏈鏈接。
一直卡在返回圖片外鏈鏈接上,一直報一個錯誤,就是不能夠回顯到頁面上。
獲取外鏈需要寫下面這段代碼。
最后才有這篇博客的出現(xiàn),希望大家能夠及時避坑。
二、具體步驟
2.1、工程目錄
2.2、導入依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--七牛云--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.2.0, 7.2.99]</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency></dependencies> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--七牛云--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>[7.2.0, 7.2.99]</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency></dependencies>2.3、yaml配置文件
server:port: 8082 oss:qiniu:url: http://qs22nqygb.hn-bkt.clouddn.com # 這里如果有自己的域名就去綁定自己的 沒有的就只能使用七牛云的測試域名accessKey: 公共密鑰 #secretKey: 私鑰 # bucketName: wyhdsg #空間名2.4、綁定配置文件
import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration;@Data @Configuration public class QiNiuYunConfig {/*** 七牛域名domain*/@Value("${oss.qiniu.url}")private String url;/*** 七牛ACCESS_KEY*/@Value("${oss.qiniu.accessKey}")private String AccessKey;/*** 七牛SECRET_KEY*/@Value("${oss.qiniu.secretKey}")private String SecretKey;/*** 七牛空間名*/@Value("${oss.qiniu.bucketName}")private String BucketName;}2.5、生成唯一圖片名稱的工具類
public class StringUtil {/*** @Description: 生成唯一圖片名稱* @Param: fileName* @return: 云服務(wù)器fileName*/public static String getRandomImgName(String fileName) {int index = fileName.lastIndexOf(".");if ((fileName == null || fileName.isEmpty()) || index == -1){throw new IllegalArgumentException();}// 獲取文件后綴String suffix = fileName.substring(index);// 生成UUIDString uuid = UUID.randomUUID().toString().replaceAll("-", "");// 生成上傳至云服務(wù)器的路徑 // String path = "news/crush/"+ DateUtil.today() + "-" + uuid + suffix;String path = uuid + suffix;return path;} }2.6、UploadImageService
import org.springframework.web.multipart.MultipartFile;public interface UploadImageService {String uploadQNImg(MultipartFile file);String getPrivateFile(String fileKey);boolean removeFile(String bucketName, String fileKey);}2.7、UploadImageServiceImpl
import com.crush.config.QiNiuYunConfig; import com.crush.service.UploadImageService; import com.crush.utils.StringUtil; import com.google.gson.Gson; import com.qiniu.common.QiniuException; import com.qiniu.common.Zone; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.DefaultPutRet; import com.qiniu.util.Auth; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.FileInputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder;@Service public class UploadImageServiceImpl implements UploadImageService {private QiNiuYunConfig qiNiuYunConfig;// 七牛文件上傳管理器private UploadManager uploadManager;//上傳的tokenprivate String token;// 七牛認證管理private Auth auth;private BucketManager bucketManager;public UploadImageServiceImpl(QiNiuYunConfig qiNiuYunConfig) {this.qiNiuYunConfig = qiNiuYunConfig;init();}private void init() {// 構(gòu)造一個帶指定Zone對象的配置類, 注意這里的Zone.zone0需要根據(jù)主機選擇uploadManager = new UploadManager(new Configuration(Zone.zone2()));auth = Auth.create(qiNiuYunConfig.getAccessKey(), qiNiuYunConfig.getSecretKey());// 根據(jù)命名空間生成的上傳tokenbucketManager = new BucketManager(auth, new Configuration(Zone.zone2()));token = auth.uploadToken(qiNiuYunConfig.getBucketName());}/** 上傳文件* @Param [file, key]* @return java.lang.String**/@Overridepublic String uploadQNImg(MultipartFile file) {try {// 獲取文件的名稱String fileName = file.getOriginalFilename();// 使用工具類根據(jù)上傳文件生成唯一圖片名稱String imgName = StringUtil.getRandomImgName(fileName);FileInputStream inputStream = (FileInputStream) file.getInputStream();// 上傳圖片文件Response res = uploadManager.put(inputStream, imgName, token, null, null);if (!res.isOK()) {throw new RuntimeException("上傳七牛出錯:" + res.toString());}// 解析上傳成功的結(jié)果DefaultPutRet putRet = new Gson().fromJson(res.bodyString(), DefaultPutRet.class);// 直接返回外鏈地址return getPrivateFile(imgName);} catch (QiniuException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return "";}/*** 獲取私有空間文件** @param fileKey* @return*/@Overridepublic String getPrivateFile(String fileKey) {String encodedFileName = null;String finalUrl = null;try {encodedFileName = URLEncoder.encode(fileKey, "utf-8").replace("+", "%20");String publicUrl = String.format("%s/%s", this.qiNiuYunConfig.getUrl(), encodedFileName);long expireInSeconds = 3600;//1小時,可以自定義鏈接過期時間finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return finalUrl;}/** 根據(jù)空間名、文件名刪除文件* @Param [bucketName, fileKey]* @return boolean**/@Overridepublic boolean removeFile(String bucketName, String fileKey) {try {bucketManager.delete(bucketName, fileKey);} catch (QiniuException e) {e.printStackTrace();}return true;}}2.8、UploadController
import com.crush.service.UploadImageService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource;@Slf4j @Controller public class UploadController {@ResourceUploadImageService uploadImageService;@GetMapping("/upload")public String upload(){return "upload";}@PostMapping(value = "/image")private String upLoadImage(@RequestParam("file") MultipartFile file, Model model) {if (!file.isEmpty()) {String path = uploadImageService.uploadQNImg(file);System.out.print("七牛云返回的圖片鏈接:" + path);model.addAttribute("link",path);return "upload";}return "";}/** 這里為了方便測試才這么寫的 可以根據(jù)實際需要 自己寫。* @Param* @return java.lang.String**/@ResponseBody@DeleteMapping("/remove")public String removeFile(){uploadImageService.removeFile("wyhdsg","0b677574afdf4a8ea1271108f1176bde.jpg");return "刪除成功";}}2.9、測試頁面
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head><meta charset="UTF-8"><title>上傳文件</title> </head> <body> <form action="/image" method="post" enctype="multipart/form-data"><label>上傳圖片</label><input type="file" name="file"/><input type="submit" value="上傳"/><p>回顯圖片:</p><img th:src="${link}"/> </form> </body> </html>2.10、測試圖片
這里也可以用postman測試的。
三、自言自語
🙅?可愛的我。
希望這篇博客能夠幫助到你。
總結(jié)
以上是生活随笔為你收集整理的SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot七牛云---报{“e
- 下一篇: 史上最全阿里云服务器上Docker部署S