使用阿里云OSS完成文件的上传样例
生活随笔
收集整理的這篇文章主要介紹了
使用阿里云OSS完成文件的上传样例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用阿里云OSS完成文件的上傳
基礎條件:
- 提前注冊過阿里云賬戶
- 賬戶里有余額(文件上傳按流量收費)
- 開通過OSS的基礎服務
如果有以上基礎條件不滿足的小伙伴,去度娘了解一下。
前言
有過基礎的小伙伴應該了解過,正常的一個WEB項目部署,通常是采用動靜分離的原則的架構,
動態資源:個人中心,搜索列表…
靜態資源:css,js,圖片,視頻…
通過動靜分離的操作,讓請求的分流,減輕服務器的壓力,文件單獨存放,方便管理,方便維護,效率優化,文件服務器種類很多,FastDFS,七牛云,OSS,今天操作的就是阿里云的OSS,下面是具體的步驟。
創建一個SpringBoot工程測試
導入OOS-SDK依賴
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version> </dependency>在application.properties中配置OSS相關的信息
#配置阿里云OOS#自己的服務器節點,OSS控制臺可看 aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com #自己的RAM子賬號key aliyun.oss.file.keyid=LTAI4G*****Nk8A1djZc1vYjV #自己的RAM子賬號secret aliyun.oss.file.keysecret=hNV3qpR*****mnKuCh1R9twVtOrVc #自己的文件存儲的bucket對象 aliyun.oss.file.bucketname=xybest4.前端控制器
package com.ddbuy.testController;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.ddbuy.entity.TbContent; import com.ddbuy.utils.IdWorker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;/*** @Auther: Mr.zhou* @Date: 2020/8/20 14:03*/ @Controller @ResponseBody @RequestMapping("/content/") public class ConentController {// 使用注入工具類對象@Autowired(required = false)private IdWorker idWorker; // 使用@Value讀取application文件里的配置@Value("${aliyun.oss.file.endpoint}")private String endpoint;@Value("${aliyun.oss.file.keyid}")private String keyid;@Value("${aliyun.oss.file.keysecret}")private String keysecret;@Value("${aliyun.oss.file.bucketname}")private String bucketname;@RequestMapping("addContent")public String addContent(@RequestParam(value = "contentpic") MultipartFile file) {// 獲取上傳文件名String filename = file.getOriginalFilename();System.out.println("所要上傳的文件名:" + filename);// 創建唯一文件名覆蓋原來要上傳的文件名,使用工具類對象產生隨機數filename = idWorker.nextId() + filename.substring(filename.lastIndexOf("."));// 手動拼出阿里云上的文件路徑String path = "http://" + bucketname + "." + endpoint + "/" + filename;System.out.println(path);try {InputStream inputStream = file.getInputStream();// 上傳文件到OSS服務器,創建OSSClient實例OSS client = new OSSClientBuilder().build(endpoint, keyid, keysecret);// 上傳文件流client.putObject(bucketname, filename, inputStream);// 關閉資源client.shutdown();} catch (Exception e) {e.printStackTrace();System.out.println("上傳失敗");return "上傳失敗";}System.out.println("上傳成功");return "上傳成功";} }6.編寫前端測試頁面代碼
這里就忽略了,注意表單的提交方式是以Post方式 加上enctype="multipart/form-data"屬性即可
補充:如果后期方便在OSS文件里方便管理圖片文件內容,可以引入工具的依賴
<!--日期時間工具--><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency>在控制器里使用工具方法 String dirpath=new DateTime().tostring(“yyyy/MM/dd”) 將當前的時間轉換為yyyy/MM/dd的格式,比如2020/02/03 ,這樣上傳的文件名字時候可以這個dirpath作為我們的圖片所在的文件夾名稱,以分布式id生成器生成的id為名稱存儲.
filename = dicpath+"/"+idWorker.nextId()+filename.substring(filename.lastIndexOf(".")); ossClient.putObject(bucketName, filename, inputStream);總結
以上是生活随笔為你收集整理的使用阿里云OSS完成文件的上传样例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue3.x 重复点击路由报错
- 下一篇: 进程间通信——消息队列(Message