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

阿里OSS对象存储服务,实现图片上传回显

阿里OSS对象存储服务

  • OSS服务
    • 1. 创建buckte
    • 2. 获取accesskey
    • 3. 参照官方SDK编写程序
      • 安装SDK
    • 4. 程序编写
    • 5. 封装
    • 6. 在spring中调用

OSS服务

阿里云对象存储 OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。

阿里云有试用的oss服务 阿里云需要的可以申请来玩玩

1. 创建buckte

在这里插入图片描述
在这里插入图片描述

2. 获取accesskey

accesskey是个人凭证,千万不要泄露

在这里插入图片描述
然后创建
在这里插入图片描述
在这里插入图片描述

3. 参照官方SDK编写程序

安装SDK

回到oss控制台,下载SDK程序
在这里插入图片描述
找到JAVA,会有对应的maven安装,复制到maven项目里面就可以安装
在这里插入图片描述

      <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- no more than 2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version></dependency>

然后找到示例程序,进行修改
在这里插入图片描述

4. 程序编写

示例代码

package com.xduzmh;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;public class Demo {public static void main(String[] args) throws Exception {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称,例如examplebucket。String bucketName = "examplebucket";// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "exampledir/exampleobject.txt";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传字符串。PutObjectResult result = ossClient.putObject(putObjectRequest);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}
}   

在这里插入图片描述
在这里插入图片描述
修改之后

package com.xduzmh;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
import java.io.File;public class Demo {public static void main(String[] args) throws Exception {// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-beijing.aliyuncs.com";// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
//		EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 填写Bucket名称,例如examplebucket。String bucketName = "big-event-xduzmh";// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "exampledir/exampleobject.txt";String ACCESS_KEY_ID = "你自己的";String ACCESS_KEY_SECRET = "你自己的";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, ACCESS_KEY_ID, ACCESS_KEY_SECRET);try {// 填写字符串。String content = "Hello OSS,你好世界";// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File("D:\\pic\\001.jpg"));// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传字符串。PutObjectResult result = ossClient.putObject(putObjectRequest);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}
}   

运行后可以在对应的bucket看到图片和图片的访问路径
在这里插入图片描述
图片路径为
bucket名字.外网访问地址/图片地址
https://big-event-xduzmh.oss-cn-beijing.aliyuncs.com/exampledir/exampleobject.txt

5. 封装

封装成工具类方便调用
输入参数objectName是完整的带有后缀的文件名。in是文件对应的输入流

package com.xduzmh.utils;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;import java.io.InputStream;public class FileUploadUtil {private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";private static final String BUCKET_NAME = "";private static final String ACCESS_KEY_ID = "";private static final String ACCESS_KEY_SECRET = "";public static String uploadFile(String objectName, InputStream in){// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);try {// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传字符串。PutObjectResult result = ossClient.putObject(putObjectRequest);String url = "https://" + BUCKET_NAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf('/') + 1) + "/" + objectName;return url;} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}return null;}
}

6. 在spring中调用

在这里插入图片描述
如果需要获取图片,可以直接访问返回的URL地址。


http://www.mrgr.cn/news/28926.html

相关文章:

  • 2019-2023(CSP-J)选择题真题解析
  • 【Android】使用Room数据库解决本地持久化
  • 每日一题——第九十八题
  • 【 html+css 绚丽Loading 】000051 方寸轮回矩
  • java138-异常处理_java 138错误
  • 2022高教社杯全国大学生数学建模竞赛C题 问题二(1) Python代码
  • 2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码
  • linux 操作系统下的 declare 命令介绍和使用案例
  • 【零散技术】详解Odoo17邮件发送(一)
  • 【乐企】基础版本开票代码接口声明
  • 【Git】将本地项目上传到git | 在IDEA的提交记录中更改 提交的用户名
  • vue MVC设计模式与MVVM设计模式
  • 牛客周赛 Round 60(下)
  • C++:初始化列表
  • nginx服务器安装和部署代理
  • Weapons Armor PBR Pack 1 - Fantasy RPG 武器护甲游戏模型
  • 【3D打印】常用Gcode和相关示例
  • a,b,c中的最大值
  • 万字长文看懂Flink的架构及原理
  • PAT甲级-1055 The World‘s Richest