上传图片到阿里云OSS

在下面的代码之前,需要知道bucket、accessKeyId、accessKeySecret,以及域名 endpoint;

 

 
 

pom.xml:

<!-- 阿里云存储 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>


阿里云配置:
private static ClientBuilderConfiguration initConf(){
// 创建ClientConfiguration。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
ClientBuilderConfiguration conf = new ClientBuilderConfiguration();

// 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
conf.setMaxConnections(CONF_MAX_CONNECTIONS);
// 设置Socket层传输数据的超时时间,默认为50000毫秒。
conf.setSocketTimeout(CONF_SOCKET_TIMEOUT);
// 设置建立连接的超时时间,默认为50000毫秒。
conf.setConnectionTimeout(CONF_CONNECTION_TIMEOUT);
// 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
conf.setConnectionRequestTimeout(CONF_CONNECTION_REQUEST_TIMEOUT);
// 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
conf.setIdleConnectionTime(CONF_IDLE_CONNECTION_TIME);
// 设置失败请求重试次数,默认为3次。
conf.setMaxErrorRetry(CONF_MAX_ERROR_RETRY);
// 设置是否支持将自定义域名作为Endpoint,默认支持。
conf.setSupportCname(true);
// 设置是否开启二级域名的访问方式,默认不开启。
conf.setSLDEnabled(false);
// 设置连接OSS所使用的协议(HTTP/HTTPS),默认为HTTP。
conf.setProtocol(Protocol.HTTP);

return conf;
}

初始化:
/** OSSClient实例 */
private static volatile OSS ossClient;

/** 双重锁单例 */
private static OSS getOssClient() {
if (ossClient == null) {
synchronized (OSS.class) {
if (ossClient == null) {
ClientBuilderConfiguration conf = initConf();
ossClient = new OSSClientBuilder().build(OSS_ENDPOINT, OSS_ACCESS_KEY_ID, OSS_ACCESS_KEY_SECRET, conf);
         //程序退出关闭ossClient
Runtime.getRuntime().addShutdownHook(new Thread(() -> ossClient.shutdown()));
            }
}
}
return ossClient;
}


上传:
// 上传文件
ossClient.putObject(OSS_BUCKET_NAME, objectName, input, objectMetadata);
// 获得上传后的url
return getImgUrl(OSS_ENDPOINT, OSS_BUCKET_NAME, objectName);

private static final String PRE_URL = "https://";
private static final String FILE_SEPARATOR = "/";
private static final String NAME_SEPARATOR = "_";
private static final String FILE_POINT = ".";

public static String getImgUrl(String endpoint, String bucketName, String objectName) {
StringBuffer sb = new StringBuffer();
sb.append(PRE_URL);
sb.append(bucketName);
sb.append(endpoint.replace(PRE_URL, FILE_POINT));
sb.append(FILE_SEPARATOR);
sb.append(objectName);
return sb.toString();
}




如果在上传的过程中遇到:
<Error>
<Code>SecondLevelDomainForbidden</Code>
<Message>The bucket you are attempting to access must be addressed using OSS third level domain.</Message>
<RequestId>5D8340FA530E23C38F6FB369</RequestId>
<HostId>oss-cn-beijing.aliyuncs.com</HostId>
</Error>

网上的办法是:将endpoint 设置成 bucket + 域名的方式 http://bucket-name.oss-cn-hangzhou.aliyuncs.com/object

 但是会出现一个新的问题:

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
<RequestId>5D8341C13EF51E45DBC0B383</RequestId>
<HostId>mgtv-cms-img.oss-cn-beijing.aliyuncs.com</HostId>
<OSSAccessKeyId>LTAI4FifYXAfMeWmiwpXWiKv</OSSAccessKeyId>
<SignatureProvided>QMy+ho20jDfI2KrEBaYAiBlC5aA=</SignatureProvided>



解决办法:将下面的配置设置成false即可
// 设置是否开启二级域名的访问方式,默认不开启。
conf.setSLDEnabled(false);

转载于:https://www.cnblogs.com/jylsgup/p/11565753.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定、组件化开发和虚拟DOM等特性,使得开发者可以更高效地构建交互式的Web应用程序。 要在Vue3中实现上传图片阿里云OSS,你可以按照以下步骤进行操作: 1. 安装依赖:首先,你需要安装阿里云OSS的JavaScript SDK。可以使用npm或yarn命令来安装,例如: ``` npm install ali-oss ``` 2. 配置OSS客户端:在Vue3的代码中,你需要创建一个OSS客户端实例,并配置相关参数,如AccessKeyId、AccessKeySecret、Endpoint等。这些参数可以在阿里云OSS控制台中获取。 3. 创建上传组件:在Vue3中,你可以创建一个上传组件,用于选择图片文件并触发上传操作。可以使用`<input type="file">`元素来实现文件选择功能,并监听其`change`事件。 4. 上传图片:在上传组件中,你可以编写上传图片的逻辑。当用户选择了图片文件后,你可以通过OSS客户端调用`put`方法来上传图片文件到阿里云OSS。 下面是一个简单的示例代码,演示了如何在Vue3中上传图片阿里云OSS: ```javascript <template> <div> <input type="file" @change="handleFileChange"> </div> </template> <script> import OSS from 'ali-oss'; export default { methods: { handleFileChange(event) { const file = event.target.files[0]; const client = new OSS({ accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', region: 'your-oss-region', // 其他配置参数... }); // 生成唯一的文件名 const fileName = Date.now() + '-' + file.name; // 调用OSS客户端的put方法上传文件 client.put(fileName, file).then(response => { console.log('上传成功', response); // 在这里可以处理上传成功后的逻辑 }).catch(error => { console.error('上传失败', error); // 在这里可以处理上传失败后的逻辑 }); } } } </script> ``` 请注意,上述代码中的`your-access-key-id`、`your-access-key-secret`、`your-bucket-name`和`your-oss-region`需要替换为你自己的阿里云OSS相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值