日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例

發(fā)布時間:2025/3/19 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。