SpringBoot+OSS實現文件上傳

創建spring boot項目

image.png

pom依賴

 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- no more than 2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version></dependency>

yaml配置文件

application.yaml

server:port: 8089
spring:profiles:active: dev
alioss:endpoint: ${alioss.endpoint}accessKeyId: ${alioss.accessKeyId}accessKeySecret: ${alioss.accessKeySecret}bucketName: ${alioss.bucketName}

application-dev.yaml

alioss:endpoint: oss-cn-beijing.aliyuncs.comaccessKeyId: 寫自己的keyIdaccessKeySecret: 寫自己的密鑰bucketName: 寫自己的bucketName

文件上傳工具類

package com.pkq.demo.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;/*** ClassName: AliOSSUtils* Package: com.pkq.demo.utils* Description:** @Author pkq* @Create 2024-07-05 15:09* @Version 1.0*/
@Component
@Slf4j
public class AliOSSUtils {@Value("${alioss.endpoint}")private String endpoint;@Value("${alioss.accessKeyId}")private String accessKeyId;@Value("${alioss.accessKeySecret}")private String accessKeySecret;@Value("${alioss.bucketName}")private String bucketName;/*** 實現上傳圖片到OSS*/public String upload(MultipartFile multipartFile) throws IOException {// 獲取上傳的文件的輸入流InputStream inputStream = multipartFile.getInputStream();// 避免文件覆蓋String originalFilename = multipartFile.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上傳文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件訪問路徑String url ="https://" + bucketName + "." + endpoint + "/" + fileName;// 關閉ossClientossClient.shutdown();return url;// 把上傳到oss的路徑返回}
}

通用返回結果類

package com.pkq.demo.result;import lombok.Data;
import lombok.NoArgsConstructor;/*** ClassName: Result* Package: com.pkq.demo.result* Description:** @Author pkq* @Create 2024-07-05 15:23* @Version 1.0*/
@Data
@NoArgsConstructor
public class Result<T> {private Integer code;private String message;private T data;public Result(T data) {this(200,null,data);}public Result(int code, String message) {this(code,message,null);}public Result(int code, String message,T data) {this.code = code;this.message = message;this.data = data;}public static <T> Result<T> success(T data) {return new Result<>(data);}public static <T> Result<T> fail(String message) {return new Result<>(500, message);}public static <T> Result<T> fail(int code, String message) {return new Result<>(code, message);}
}

文件上傳接口

package com.pkq.demo.controller;import com.pkq.demo.result.Result;
import com.pkq.demo.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;/*** ClassName: UploadController* Package: com.pkq.demo.controller* Description:** @Author pkq* @Create 2024-07-05 15:27* @Version 1.0*/
@Slf4j
@RestController
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result<String> upload(MultipartFile image) throws IOException {//調用阿里云OSS工具類,將上傳上來的文件存入阿里云String url = aliOSSUtils.upload(image);//將圖片上傳完成后的url返回,用于瀏覽器回顯展示return Result.success(url);}}

image.png

測試

image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41899.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot項目練習

文章目錄 SpringBootVue后臺管理系統所需軟件下載、安裝、版本查詢Vue搭建一個簡單的Vue項目 Spring項目1項目架構 SpringBootVue后臺管理系統 學習視頻&#xff1a; https://www.bilibili.com/video/BV1U44y1W77D/?spm_id_from333.337.search-card.all.click&vd_sourcec…

深入Laravel事件系統:創建與使用事件的指南

Laravel的事件系統是一種強大的機制&#xff0c;它允許你將應用程序的行為封裝成事件&#xff0c;然后在適當的時候觸發這些事件。這不僅有助于代碼的解耦&#xff0c;還提高了應用程序的可維護性和可擴展性。本文將詳細介紹如何在Laravel中創建和使用事件&#xff0c;包括事件…

2024年7月6日隨筆

期末考試全部結束了&#xff0c;這個月是真累啊&#xff0c;一堆事&#xff0c;好在都熬過來了&#xff0c;上次參加的那個碼題杯自己居然進國賽了&#xff0c;我看了一下職業賽道和本科賽道的題&#xff0c;本科賽道的感覺要難上不少&#xff0c;比賽時間是一周后&#xff0c;…

Pytorch(筆記7損失函數類型)

前言 損失函數&#xff08;Loss Function&#xff09;&#xff1a;是定義在單個樣本上的&#xff0c;是指一個樣本的誤差&#xff0c;度量模型一次預測的好壞。 代價函數&#xff08;Cost Function&#xff09;成本函數經驗風險&#xff1a;是定義在整個訓練集上的&#xff0c…

集成學習(三)GBDT 梯度提升樹

前面學習了&#xff1a;集成學習&#xff08;二&#xff09;Boosting-CSDN博客 梯度提升樹&#xff1a;GBDT-Gradient Boosting Decision Tree 一、介紹 作為當代眾多經典算法的基礎&#xff0c;GBDT的求解過程可謂十分精妙&#xff0c;它不僅開創性地舍棄了使用原始標簽進行…

virtualbox窗口和win10窗口的切換

1、問題&#xff1a; 從windows切換到虛擬機可以用快捷鍵 ALTTAB&#xff0c;但是從虛擬機到windows使用 ALTTAB 無法成功切換 2、解決方法&#xff1a; 按下圖操作 按上面步驟設置之后&#xff0c;每次要從虛擬機窗口切換到windows窗口 只需要先按 CtrlAlt 跳出虛擬機窗口&…

【已解決】“import ... =“ 只能在 TypeScript 文件中使用

現象 在使用 import 語法的時候&#xff0c;代碼報紅&#xff0c;提示&#xff1a;“import ... “ 只能在 TypeScript 文件中使用 原因 代碼被 VSCode 解析成 TypeScript 語法 解決方案&#xff1a; 關閉 JavaScript 的驗證啟用即可。 mac 快捷方式&#xff1a;comman s…

微機原理與單片機 知識體系梳理

單片機筆記分享 我個人感覺單片機要記的東西很多&#xff0c;也很瑣碎&#xff0c;特別是一些位、寄存器以及相關作用等&#xff0c;非常難以記憶。因此復習時將知識點整理在了一起做成思維導圖&#xff0c;希望對大家有所幫助。內容不是很多&#xff0c;可能有些沒覆蓋全&…

vue-tabs標簽頁引入其他頁面

tabs頁面 <template> <div class"app-container"> <el-tabs v-model"activeName" type"card" tab-click"handleClick"> <el-tab-pane label"套餐用戶列表" name"first"> <user-list r…

VMware CentOS7 Linux 網絡配置

本文主要描述VMware虛擬機的網絡配置。 如上所示&#xff0c;在CentOS Linux虛擬機中設置網絡連接使用橋接模式&#xff0c;該模式對接主機物理網絡&#xff0c;直接由主機的物理網絡的DHCP服務器動態分配IP地址&#xff0c;或者在CentOS Linux的操作系統的網絡配置中設置靜態的…

HACCP體系認證:守護食品安全的黃金標準

在食品生產過程中&#xff0c;食品安全始終是重中之重。為了確保食品的安全性和質量&#xff0c;越來越多的企業開始采用HACCP&#xff08;危害分析關鍵控制點&#xff09;體系認證。這個體系不僅能幫助企業預防食品安全問題&#xff0c;還能顯著提升產品質量和市場競爭力。 HA…

android新聞app(二)

新聞詳細頁&#xff1a; 歷史瀏覽記錄SQList&#xff1a; 分類&#xff1a; 歷史瀏覽記錄主體UI和詳細&#xff1a; 側邊欄&#xff1a; 參考&#xff1a;浩宇開發

如何給gitlab其他訪問者創建賬號并增加權限

嗨&#xff0c;今天創建了項目之后&#xff0c;我想把項目鏈接發送給其他人&#xff0c;讓他下載這個項目&#xff0c;結果發現對方打開顯示登錄的界面&#xff0c;沒錯&#xff0c;他要想使用這個git下載項目&#xff0c;首先他的有一個git賬號 接下來我找有權限的相關人員給他…

網絡“ping不通”,如何排查和解決呢?

網絡問題往往復雜且難以預測&#xff0c;其中“ping不通”是常見的網絡故障之一。 1. 確認問題現象 首先&#xff0c;明確問題是完全無法ping通(無響應)還是ping通但有高延遲或丟包。這有助于縮小問題范圍。 2. 本地檢查 網絡接口狀態&#xff1a;使用ifconfig(Linux)或ipc…

認識并理解webSocket

今天逛牛客&#xff0c;看到有大佬分享說前端面試的時候遇到了關于webSocket的問題&#xff0c;一看自己都沒見過這個知識點&#xff0c;趕緊學習一下&#xff0c;在此記錄&#xff01; WebSocket 是一種網絡通信協議&#xff0c;提供了全雙工通信渠道&#xff0c;即客戶端和服…

策略為王股票軟件源代碼-----如何修改為自己軟件61----資訊菜單修改-----舉例---------調用同花順網頁------

http://stock.sina.com.cn 將原來的新浪行情,修改為同花順, 搜索 stock.sina.com.cn... StkUI\View\InfoView.cpp(58):char

AI防損員的應用:正確率高達90%背后的真相與挑戰

1. AI防損員的工作原理 AI防損員利用圖像識別技術來判斷商超中的行為是否異常。它將所有觀察到的行為分為兩類&#xff1a;正常行為和異常行為。這是一種二分類問題。 2. 數據不平衡問題 在現實中的商超環境中&#xff0c;正常行為占絕大多數&#xff0c;異常行為&#xff08;…

MySQL——備份

為什么要備份&#xff1f; 保證重要的數據不丟失 方便數據轉移 MySQL數據庫備份方式&#xff1a; 1. 直接拷貝物理文件 2. 在可視化工具中手動導出 —— 在想要導出的表或者庫中&#xff0c;右鍵選擇備份或導出 3. 使用命令行導出 mysqldump ——cmd打開命令行 —…

Python實現Mybatis Plus

Python實現Mybatis Plus from flask import g from sqlalchemy import asc, descclass QueryWrapperBuilder:conditions {}order_by_info {}def __new__(cls, *args, **kwargs):obj super(QueryWrapperBuilder, cls).__new__(cls)return objdef __init__(self, obj):self.o…

論文閱讀--Simple Baselines for Image Restoration

這篇文章是 2022 ECCV 的一篇文章&#xff0c;是曠視科技的一篇文章&#xff0c;針對圖像恢復任務各種網絡結構進行了梳理&#xff0c;最后總結出一種非常簡單卻高效的網絡結構&#xff0c;這個網絡結構甚至不需要非線性激活函數。 文章一開始就提到&#xff0c;雖然在圖像復原…