200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 阿里云对象存储OSS上传照片(附源码)

阿里云对象存储OSS上传照片(附源码)

时间:2019-02-05 03:46:43

相关推荐

阿里云对象存储OSS上传照片(附源码)

版权声明

作者:谷哥的小弟作者博客地址:/lfdfhl

参考教程

OSS官方文档:/document_detail/3.htmlRAM访问控制:/lfdfhl/article/details/127156419

概述

在本教程中详细介绍阿里云对象存储OSS上传照片的详细步骤及其注意事项。

创建Maven项目

请在IDEA中创建Maven项目;图示如下:

添加依赖

请在项目中添加依赖;图示如下:

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.0</version></dependency>

创建存储空间

存储空间是OSS的全局命名空间,相当于数据的容器,可以存储若干文件。

所以,可以使用原有的Bucket;也可以通过代码新建Bucket;代码如下:

package ;import com.aliyun.oss.ClientException;import com.aliyun.oss.OSS;import com.aliyun.oss.OSSClientBuilder;import com.aliyun.oss.OSSException;/*** 本文作者:谷哥的小弟* 博客地址:/lfdfhl*/public class Demo1 {public static void main(String[] args) throws Exception {// 请按实际情况填写endpointString endpoint = "https://oss-cn-";// 建议创建并使用RAM用户并填写其accessKeyId和accessKeySecretString accessKeyId = Config.AccessKeyID;String accessKeySecret = Config.AccessKeySecret;// 填写Bucket名称String bucketName = "lfdfhl01";// 创建OSSClient实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建存储空间ossClient.createBucket(bucketName);} 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 {// 关闭OSSClient实例if (ossClient != null) {ossClient.shutdown();}}}}

图示如下:

程序运行完毕;图示如下:

在阿里云OSS管理控制台查看新增的Bucket;图示如下:

上传照片

在此,实现向Bucket上传照片的功能;代码如下:

package ;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.PutObjectResult;import java.io.File;import java.io.FileInputStream;/*** 本文作者:谷哥的小弟* 博客地址:/lfdfhl*/public class Demo2 {public static void main(String[] args) throws Exception {// 请按实际情况填写endpointString endpoint = "https://oss-cn-";// 建议创建并使用RAM用户并填写其accessKeyId和accessKeySecretString accessKeyId = Config.AccessKeyID;String accessKeySecret = Config.AccessKeySecret;// 填写Bucket名称String bucketName = "lfdfhl01";// 待上传文件File file = new File("D:\\测试资源\\beauty.jpg");// 获取文件输入流FileInputStream fileInputStream = new FileInputStream(file);// 填写Object完整路径(即上传后保存的路径及文件名)String objectName = file.getName();// 创建OSSClient实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 判断上传是否成功boolean isSuc = true;// 图片上传后服务器返回的ETagString eTag = null;try {// 上传文件PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, fileInputStream);// 获取ETageTag = putObjectResult.getETag();System.out.println("eTag="+eTag);} catch (OSSException oe) {// 上传失败isSuc = false;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) {// 上传失败isSuc = false;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 {// 关闭OSSClient实例if (ossClient != null) {ossClient.shutdown();}// 上传成功if(eTag!=null&&isSuc){// 上传成功后拼接文件在服务器上的地址String url = "https://" + bucketName + "."+"oss-cn-" +"/"+objectName;System.out.println("文件上传成功,url="+url);}}}}

操作成功后可在对应的Bucket中查看上传的图片;图示如下:

查看图片详情可见其ETag值与刚才代码获取的ETag相等;图示如下:

图片上传是否成功的判断

许多人在刚开始用阿里云对象存储OSS上传照片时,都面临一个困惑:如何判断图片是否上传成功呢?

文件上传的方法ossClient.putObject( )返回值为PutObjectResult类型。我们尝试从PutObjectResult中通过putObjectResult.getResponse( )获取响应;很遗憾该方法返回的ResponseMessage为null。

在此,我抛出一个砖供大家借鉴;思路如下:

1、从PutObjectResult中获取ETag;该值不为空则表示上传成功2、上传过程中不发生异常,则表示上传成功3、为保险起见,同时满足以上两个条件时判断文件上传成功

友情提示

Bucket的权限是“公共读”时可能导致外界的大量恶意访问造成流量过度消耗。所以,我们要有意识地检查是否将权限修改为了私有;图示如下:

当然,在开发过程中假若不需要考虑数据安全且便于测试时可将权限重新改为公共即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。