Java使用OSS實(shí)現(xiàn)上傳文件功能
1.準(zhǔn)備OSS
- 訪問阿里云官網(wǎng),注冊(cè)并登錄賬戶(支付寶方便一些,順便沖點(diǎn)錢)
- 在產(chǎn)品分類中,找到阿里云oss
- 然后創(chuàng)建一個(gè)bucket
2.使用OSS(上傳文件)
2.1在阿里云網(wǎng)站導(dǎo)出阿里云頒發(fā)的 id 和 秘鑰
2.2導(dǎo)入maven坐標(biāo)
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.1.0</version> </dependency>
2.3進(jìn)入阿里云oss的學(xué)習(xí)路徑,找到對(duì)應(yīng)java操作的代碼
2.3.1首先創(chuàng)建配置文件,將秘鑰等信息進(jìn)行配置
#服務(wù)端口 server.port=8002 #服務(wù)名 spring.application.name=service-oss #環(huán)境設(shè)置:dev、test、prod spring.profiles.active=dev #阿里云 OSS #不同的服務(wù)器,地址不同 aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com aliyun.oss.file.keyid=自己的keyid aliyun.oss.file.keysecret=自己的keysecret #bucket可以在控制臺(tái)創(chuàng)建,也可以使用java代碼創(chuàng)建 aliyun.oss.file.bucketname=自己創(chuàng)建的bucket名字
2.3.2創(chuàng)建一個(gè)工具類,將配置的屬性注入到容器中
package com.gyb.eduoss.utils; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * @Author: 郜宇博 * @Date: 2021/9/30 14:54 */ @Component @ConfigurationProperties(prefix = "aliyun.oss.file") @Data public class AliyunOSSProUtil { private String endpoint; private String keyid; private String keysecret; private String bucketname; }
2.3.3編寫java實(shí)現(xiàn)類代碼(文件上傳)
package com.gyb.eduoss.service.impl; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.gyb.eduoss.service.OssService; import com.gyb.eduoss.utils.AliyunOSSProUtil; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; /** * @Author: 郜宇博 * @Date: 2021/9/30 15:53 */ @Service public class OssServiceImpl implements OssService { @Autowired AliyunOSSProUtil aliyunOSSProUtil; @Override public String uploadFileAvatar(MultipartFile multipartFile) { //從工具類獲取配置文件中的oss值 String endpoint = aliyunOSSProUtil.getEndpoint(); String accessKeyId = aliyunOSSProUtil.getKeyid(); String accessKeySecret = aliyunOSSProUtil.getKeysecret(); String bucketName = aliyunOSSProUtil.getBucketname(); System.out.println("endponit:"+endpoint); // 創(chuàng)建OSSClient實(shí)例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 填寫本地文件的完整路徑。 // 如果未指定本地路徑,則默認(rèn)從示例程序所屬項(xiàng)目對(duì)應(yīng)本地路徑中上傳文件流。 InputStream inputStream; try { inputStream = multipartFile.getInputStream(); //參數(shù)一:依次填寫B(tài)ucket名稱 // 參數(shù)二:文件名稱,或Object完整路徑(例如exampledir/exampleobject.txt)。Object完整路徑中不能包含Bucket名稱。 // 參數(shù)三:輸入流 String currentTime = String.valueOf(System.currentTimeMillis()); String currentDate = new DateTime().toString("yyyy/MM/dd"); String originalFileName = multipartFile.getOriginalFilename(); String fileName = currentDate+"/"+currentTime+originalFileName; ossClient.putObject(bucketName,fileName, inputStream); String url = "https://"+bucketName+"."+endpoint+"/"+fileName; return url; } catch (IOException e) { e.printStackTrace(); }finally { // 關(guān)閉OSSClient。 ossClient.shutdown(); } return null; } }
2.3.4創(chuàng)建config類,防止傳入文件為null
package com.gyb.eduoss.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.commons.CommonsMultipartResolver; /** * @Author: 郜宇博 * @Date: 2021/10/2 00:21 */ @Configuration public class UploadConfig { @Bean(name = "multipartResolver") public MultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); //resolveLazily屬性啟用是為了推遲文件解析,以在在UploadAction中捕獲文件大小異常 resolver.setResolveLazily(true); resolver.setMaxInMemorySize(40960); //上傳文件大小 5M 5*1024*1024 resolver.setMaxUploadSize(5 * 1024 * 1024); return resolver; } }
3.配置Nginx反向代理(可以不配)
下載Nginx
實(shí)現(xiàn)將對(duì)應(yīng)訪問地址進(jìn)行正則匹配轉(zhuǎn)發(fā)
3.1將監(jiān)聽端口改為81(防止沖突)
3.2配置轉(zhuǎn)發(fā)列表
server { listen 9001; server_name localhost; #代表帶有eduservice路徑的請(qǐng)求都走h(yuǎn)ttp://localhost:8001 location ~ /eduservice/ { proxy_pass http://localhost:8001; } #代表帶有eduoss的請(qǐng)求都走h(yuǎn)ttp://localhost:8002 location ~ /eduoss/ { proxy_pass http://localhost:8002; } }
4.結(jié)果
此時(shí)將前端的訪問接口改為9001,即可實(shí)現(xiàn)下圖功能
從而實(shí)現(xiàn)功能不同的請(qǐng)求訪問不同的服務(wù)器
以上就是Java使用OSS實(shí)現(xiàn)上傳文件功能的詳細(xì)內(nèi)容,更多關(guān)于Java OSS上傳文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java實(shí)現(xiàn)整合文件上傳到FastDFS的方法詳細(xì)
- Java實(shí)現(xiàn)圖片上傳至FastDFS入門教程
- Java 客戶端操作 FastDFS 實(shí)現(xiàn)文件上傳下載替換刪除功能
- Java fastdfs客戶端實(shí)現(xiàn)上傳下載文件
- Java下載https文件并上傳阿里云oss服務(wù)器
- Java微信小程序oss圖片上傳的實(shí)現(xiàn)方法
- java實(shí)現(xiàn)上傳文件到oss(阿里云)功能示例
- java獲取網(wǎng)絡(luò)圖片上傳到OSS的方法
- Java實(shí)現(xiàn)Fast DFS、服務(wù)器、OSS上傳功能
相關(guān)文章
SpringBoot項(xiàng)目啟動(dòng)打包報(bào)錯(cuò)類文件具有錯(cuò)誤的版本 61.0, 應(yīng)為 52.0的解決
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動(dòng)打包報(bào)錯(cuò)類文件具有錯(cuò)誤的版本 61.0, 應(yīng)為 52.0的解決方法,文中有詳細(xì)的排查過程和解決方法,通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11解決在Gradle/IDEA中無法正常使用readLine的問題原因
這篇文章主要介紹了在Gradle/IDEA中無法正常使用readLine的解決方法,原因是由于Gradle的標(biāo)準(zhǔn)輸入默認(rèn)并不與系統(tǒng)標(biāo)準(zhǔn)輸入綁定,需手動(dòng)設(shè)置,需要的朋友可以參考下2021-12-12java實(shí)現(xiàn)word文件轉(zhuǎn)html文件
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)word文件轉(zhuǎn)html文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Mybatis入門教程(四)之mybatis動(dòng)態(tài)sql
這篇文章主要介紹了Mybatis入門教程(四)之mybatis動(dòng)態(tài)sql的相關(guān)資料,涉及到動(dòng)態(tài)sql及動(dòng)態(tài)sql的作用知識(shí),本文介紹的非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09如何使用Spring工具類動(dòng)態(tài)匹配url
這篇文章主要介紹了如何使用Spring工具類動(dòng)態(tài)匹配url,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12MyBatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充功能詳解
在開發(fā)中經(jīng)常遇到多個(gè)實(shí)體類有共同的屬性字段,這些字段屬于公共字段,也就是很多表中都有這些字段,能不能對(duì)于這些公共字段在某個(gè)地方統(tǒng)一處理,來簡(jiǎn)化開發(fā)呢?MyBatis-Plus就提供了這一功能,本文就來為大家詳細(xì)講講2022-08-08