在java上使用亞馬遜云儲(chǔ)存方法
在java上使用亞馬遜云儲(chǔ)存方法
1.寫一個(gè)配置類
package com.app.framework.config;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AmazonS3Config {
@Bean
public AmazonS3 amazonS3Client() {
//用戶名
String accessKey = "";
//密碼
String secretKey = "";
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
AWSStaticCredentialsProvider awsStaticCredentialsProvider = new AWSStaticCredentialsProvider(credentials);
ClientConfiguration config = new ClientConfiguration();
String region = "wx-pbc";
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration("cos.wx-pbc.cos.tg.unicom.local", region);
return AmazonS3ClientBuilder.standard()
.withCredentials(awsStaticCredentialsProvider)
.withClientConfiguration(config.withProtocol(Protocol.HTTP).withSignerOverride("S3SignerType"))
.withEndpointConfiguration(endpointConfiguration).build();
}
}2.寫一個(gè)controller接口調(diào)用方法存儲(chǔ)文件
package com.app.project.welfare.controller;
import cn.hutool.core.lang.UUID;
import com.aliyun.oss.*;
import com.aliyun.oss.model.PutObjectResult;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.app.framework.web.domain.AjaxResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@RequestMapping("/oss")
@RestController
@Slf4j
public class OssController {
/**
* 把文件上傳到自己的服務(wù)器,然后在上傳到 Amazon s3存儲(chǔ)器
*/
@PostMapping("/upload-img-s3")
public AjaxResult uploadImgAmazonS3(@RequestParam("file") MultipartFile file) throws IOException {
log.info("文件上傳:{}", file);
//生成一個(gè)隨機(jī)的UUID(通用唯一標(biāo)識(shí)符)
UUID uuid = UUID.fastUUID();
//獲取上傳文件的原始文件名,并將其存儲(chǔ)在變量fileName中
String fileName = file.getOriginalFilename();
//使用斷言確保fileName不為空,如果為空則拋出異常
assert fileName != null;
//將文件名按照點(diǎn)號(hào)(".")分割成一個(gè)字符串?dāng)?shù)組
String[] fileNameSplit = fileName.split("\\.");
//將UUID和原始文件名中的擴(kuò)展名重新拼接起來(lái),形成新的文件名
fileName = uuid + "." + fileNameSplit[1];
//創(chuàng)建一個(gè)新的ObjectMetadata對(duì)象
ObjectMetadata objectMetadata = new ObjectMetadata();
//獲取上傳文件的輸入流,并使用available()方法來(lái)獲取該流中可用的字節(jié)數(shù)
objectMetadata.setContentLength(file.getInputStream().available());
//獲取上傳文件的內(nèi)容類型(MIME類型)
String contentType = file.getContentType();
//將獲取到的文件內(nèi)容類型設(shè)置為新文件的元數(shù)據(jù)內(nèi)容類型
objectMetadata.setContentType(contentType);
// 設(shè)置公共讀
objectMetadata.setHeader("x-amz-acl", "public-read");
//拼接
String finalFileName = "name/" + fileName;
//將文件上傳到名為"name"的S3存儲(chǔ)桶中
amazonS3.putObject("name", finalFileName, file.getInputStream(), objectMetadata);
String imgUrl = "https://xxx" + finalFileName;
return AjaxResult.success(imgUrl);
}
}這樣,當(dāng)前端調(diào)用后端的controller接口,就可以上傳文件到亞馬遜oss儲(chǔ)存地址了
到此這篇關(guān)于在java上使用亞馬遜云儲(chǔ)存方法的文章就介紹到這了,更多相關(guān)java 亞馬遜云儲(chǔ)存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis自動(dòng)生成時(shí)如何設(shè)置不生成Example類詳解
這篇文章主要給大家介紹了關(guān)于mybatis自動(dòng)生成時(shí)如何設(shè)置不生成Example類的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
Java計(jì)算兩個(gè)時(shí)間段的差的實(shí)例詳解
在本篇內(nèi)容中,我們給大家整理了關(guān)于Java計(jì)算兩個(gè)時(shí)間段的差的實(shí)例內(nèi)容,并做了詳細(xì)分析,有需要的朋友們學(xué)習(xí)下。2022-11-11
springboot結(jié)合redis實(shí)現(xiàn)搜索欄熱搜功能及文字過濾
本文主要介紹了springboot結(jié)合redis實(shí)現(xiàn)搜索欄熱搜功能及文字過濾,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
idea 多模塊項(xiàng)目依賴父工程class找不到問題的方法
這篇文章主要介紹了idea 多模塊項(xiàng)目依賴父工程class找不到問題的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-01-01
通過spring boot 設(shè)置tomcat解決 post參數(shù)限制問題
這篇文章主要介紹了通過spring boot 設(shè)置tomcat解決 post參數(shù)限制問題,需要的朋友可以參考下2019-05-05
詳解在spring boot中配置多個(gè)DispatcherServlet
本篇文章主要介紹了詳解在spring boot中配置多個(gè)DispatcherServlet,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03
java中的類型自動(dòng)轉(zhuǎn)換機(jī)制解析
這篇文章主要介紹了java中的類型自動(dòng)轉(zhuǎn)換機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
使用Idea快速搭建SpringMVC項(xiàng)目的詳細(xì)步驟記錄
這篇文章主要給大家介紹了關(guān)于使用Idea快速搭建SpringMVC項(xiàng)目的詳細(xì)步驟,Spring?MVC是一種基于MVC模式的框架,它是Spring框架的一部分,它提供了一種更簡(jiǎn)單和更有效的方式來(lái)構(gòu)建Web應(yīng)用程序,需要的朋友可以參考下2024-05-05

