当前位置: 首页 > wzjs >正文

沈阳市网站设计制作公司易推广

沈阳市网站设计制作公司,易推广,微网站站点名称,十堰微网站建设费用为什么写这篇文章 项目里面使用到了七牛云,原来是基于七牛云的SDK来实现,后面由于内网部署的问题,考虑换成Minio,此时面临一个问题,需要修改代码。如果后期要换成阿里的SSO呢?或者换成腾讯云呢&#xff1f…

为什么写这篇文章

项目里面使用到了七牛云,原来是基于七牛云的SDK来实现,后面由于内网部署的问题,考虑换成Minio,此时面临一个问题,需要修改代码。如果后期要换成阿里的SSO呢?或者换成腾讯云呢?那每次都要修改代码太麻烦,而且最主要的是我的需求可能是在内网环境我使用Minio,而在外网环境我又要使用七牛云。有没有一种办法是不需要修改代码只修改一些配置文件就能切换多个云平台呢?找了一下,AWS的S3应该是满足的。

我理解的AWS S3

S3是亚马逊平台的文件管理协议,猜测是因为用的人多且推出较早,后期推出的很多云存储都对S3协议有支持,比如七牛云的支持连接:https://developer.qiniu.com/kodo/4086/aws-s3-compatible
在这里插入图片描述
其他的阿里云,腾讯云,Minio据说也是支持的

如何使用(基于Springboot项目)

1、导入maven包

<dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>1.12.540</version>
</dependency>

2、增加yml相关配置

s3:accessKey: xxxsecretKey: xxxbucketName: xxendpoint: https://s3.cn-south-1.qiniucs.comregion: cn-south-1

3、S3ClientConfig

package com.yrt.framework.config;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.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author :GuangXiZhong* @date :Created in 2025/6/10 15:21* @description:*/
@Configuration
public class S3ClientConfig {@Value("${s3.accessKey}")private String accessKey;@Value("${s3.secretKey}")private String secretKey;@Value("${s3.endpoint}")private String endpoint;@Value("${s3.region}")private String region;@Beanpublic AmazonS3 amazonS3Client() {// 初始化 S3 客户端AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);return AmazonS3ClientBuilder.standard().withEndpointConfiguration(endpointConfiguration).withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();}
}

4、S3Service上传服务

package com.yrt.common.utils;import com.amazonaws.HttpMethod;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;@Service
public class S3Service {@Value("${s3.bucketName}")private String bucketName;@Autowiredprivate AmazonS3 s3Client;// 上传文件public String uploadFile(String key, File file) {s3Client.putObject(new PutObjectRequest(bucketName, key, file));return s3Client.getUrl(bucketName, key).toString();}// 上传文件并指定文件名public String uploadFileWithKey(String key, InputStream inputStream) throws IOException {ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(inputStream.available());s3Client.putObject(new PutObjectRequest(bucketName, key, inputStream, metadata));return s3Client.getUrl(bucketName, key).toString();}// 删除文件public void deleteFile(String key) {s3Client.deleteObject(new DeleteObjectRequest(bucketName, key));}// 获取文件的公共访问链接public String getFilePublicUrl(String key) {return s3Client.getUrl(bucketName, key).toString();}// 获取文件的私有访问链接(带签名)public String getFileSignedUrl(String key, long expirationTime) {Date expirationDate = new Date(System.currentTimeMillis() + expirationTime);GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, key).withMethod(HttpMethod.GET).withExpiration(expirationDate);URL signedUrl = s3Client.generatePresignedUrl(request);return signedUrl.toString();}
}

5、测试

package com.yrt;import com.yrt.common.utils.S3Service;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;import java.io.File;/*** @author :GuangXiZhong* @date :Created in 2025/4/23 16:06* @description:*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("dev")
public class S3Test {@Autowiredprivate S3Service s3Service;/*** S3测试*/@org.junit.Testpublic void testS3() {File file = new File("/Users/zhongguangxi/Documents/测试图片.png");System.out.println(s3Service.uploadFile("test2561018", file));}
}

运行一下可以看到输出了URL,说明成功了,此时去七牛空间看一下也能看到确实上传上去了
在这里插入图片描述

在这里插入图片描述

题外话:关于如何设置SDK的代理

有时候系统需要在内网服务器部署,内网服务器本身不通外网,但可以通过前置机服务器访问外网,需要再前置机上放置一个nginx代理,然后把sdk的上传地址设置成前置机的地址,通过nginx代理出去外网,但是此时遇到了一个问题

SDK的连接地址是直接写死在源码里面的,怎么修改这个地址呢?

我咨询了七牛云的工程师,给到的回复是

Java SDK本身并不直接提供设置代理的功能,你可以通过配置底层的HTTP客户端来实现代理设置,在七牛的Java SDK中,通常使用的是OkHttp作为默认的HTTP客户端。要设置代理,你需要自定义OkHttpClient实例,并在其中配置代理参数。

为此我尝试了如下办法

System.setProperty("http.proxyHost", "前置机IP");
System.setProperty("http.proxyPort", "代理端口");System.setProperty("https.proxyHost", "前置机IP"); 
System.setProperty("https.proxyPort", "代理端口");
http://www.dtcms.com/wzjs/783898.html

相关文章:

  • 网站首次打开速度慢wordpress网站点击量与排名
  • 秦皇岛和平大街网站建设小版本wordpress
  • 哪里有做网站服务网站推广优化如何做
  • 网站ip段屏蔽白银市建设局网站首页
  • wordpress企业站主题免费网站备案信息变更
  • 上海松江网站建设公司html5动画效果代码
  • 如何做网站的源码网站要怎么做关键词
  • 类似设计师联盟的网站开发区网站建设的目的
  • 国家建设部网站证书查询苏州高端网站建设咨询
  • 网站建设的问题分析自己做网站需要哪些软件
  • 网站开发人员职责seo商学院
  • 全国网站联盟网站建设企业网站界面设计
  • 做有奖竞猜网站违法吗网络营销方法的选择
  • 织梦电影网站模板wordpress汉化音乐主题
  • 医疗器械类网站前置审批材料模板公司网站建设说明书
  • 企业网站制作心得如何进行免费网络推广
  • 做网站需要什么电脑配置开发网站的过程
  • 免费的黄冈网站有哪些平台游戏软件太原市一页网络科技有限公司
  • 网站怎么申请官网做电商网站企业
  • 建设银行企业网站wordpress 嵌入pdf
  • 广东网站优化哪个平台可以买卖链接
  • 多屏合一网站建设wordpress响应式视频主题
  • 手机网站免费建设企业管理系统开源
  • 重庆工程招标网站有哪些做网站卖印度药
  • 室内设计学校专业外贸网站推广seo
  • 成立网站公司需要什么c++网站开发
  • 顺义网站建设报价php网站开发书籍
  • 电子销售网站模板免费下载欧派全屋定制
  • 网站建设维护什么意思ui设计不要30岁的
  • 北京专业响应式网站建设莱芜在线话题苏春媛