版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

参考教程

  • OSS官方文档:https://help.aliyun.com/document_detail/32007.html
  • RAM访问控制:https://blog.csdn.net/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 com.cn;import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
/*** 本文作者:谷哥的小弟* 博客地址:http://blog.csdn.net/lfdfhl*/
public class Demo1 {public static void main(String[] args) throws Exception {// 请按实际情况填写endpointString endpoint = "https://oss-cn-chengdu.aliyuncs.com";// 建议创建并使用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 com.cn;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;/*** 本文作者:谷哥的小弟* 博客地址:http://blog.csdn.net/lfdfhl*/
public class Demo2 {public static void main(String[] args) throws Exception {// 请按实际情况填写endpointString endpoint = "https://oss-cn-chengdu.aliyuncs.com";// 建议创建并使用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-chengdu.aliyuncs.com" +"/"+objectName;System.out.println("文件上传成功,url="+url);}}}
}


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

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

图片上传是否成功的判断

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

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

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

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

友情提示

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

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

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

  1. 阿里云对象存储OSS图片上传并回显

    阿里云对象存储OSS图片上传并回显 Java代码实现 引入依赖 <!-- 引入阿里云OSS依赖--><dependency><groupId>com.aliyun. ...

  2. 阿里云对象存储OSS文件上传

    阿里云oss地址: 对象存储OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储OSS是一款海量.安全.低成本.高可靠的云存储服务,提供12个9的数据持久性,99.995%的数据可用性和多种存 ...

  3. spring boot上传阿里云对象存储OSS快速上手(一、控制台简介)

    代码实现请看下一篇: spring boot上传阿里云对象存储OSS快速上手(二.代码实现,复制粘贴可用) 简介: 1.阿里云对象存储OSS其实就是一个文件存储的服务 2.在我们的开发过程中会遇到类似 ...

  4. 阿里云对象存储OSS存储照片

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 概述 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可 ...

  5. 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客

    如何利用阿里云对象存储OSS搭建自己图床写博客 1.购买阿里云 购买链接 登录阿里云–>控制台–>对象存储OSS–购买 购买的时候可以选择按月付费一月一元的,也可以年费9元的,40GB作为 ...

  6. 阿里云对象存储OSS与文件存储NAS的区别

    一.简介 应用场景:选择一款存储产品,面向文档数据的存取,不会涉及到数据处理. 产品选型主要从OSS和NAS中选择一款,满足文档存储的需求. 二.NAS优缺点 NAS 是一种采用直接与网络介质相连的特 ...

  7. 开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。

    一.背景 阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用.在使用过程中难免会遇到误操作.程序 Bug.覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况 ...

  8. 关于阿里云对象存储OSS流量包说明

    阿里云对象存储OSS公网出方向流量是收费的,内网产生的流量或者公网入方向流量都是免费的,OSS流量计费方式分为按量付费和包年包月流量包两种计费模式,云吞铺子来详细说下阿里云对象存储OSS流量收费标准价 ...

  9. 阿里云对象存储OSS(Object Storage Service)

    文章目录 简介 endpoint:阿里云服务部署的地区位置 见解 开发步骤 配置文件 utils层(读取全局配置文件并赋值给类变量) service层 impl(基于oss驱动sdk实现类) cont ...

  10. 坑!阿里云对象存储OSS收费细则不只是存储还有其他扣费项

    阿里云对象存储OSS怎么收费?以为只收取存储费用,不只是存储费还有流量.跨区域复制.流量费.请求费.数据处理费用.对象标签费用.传输加速费用等,快看看别让钱花得不清不楚,云吞铺子来详细说下阿里云对象存 ...

最新文章

  1. Mysql一些重要配置参数的学习与整理(一)
  2. 改变Eclipse主题颜色
  3. python 合并区间
  4. Writing for Myself.part2
  5. 计算机系统基础:文件的存取和存储空间管理知识笔记
  6. 银行不告诉的秘密,看完豁然大悟
  7. arch模型的思路_时间序列--ARCH模型
  8. php scandir 目录树,使用php scandir函数遍历文件夹目录和所有文件
  9. win10系统哪个是索引服务器,win10系统下控制面板没有索引如何解决
  10. php 判断来访国内外IP
  11. Microsoft caffe(caffe-windows) cifar实例编译之model的使用
  12. ARTIF:实时威胁智能识别框架
  13. linux拷贝文件和目录命令,Linux 命令 - cp: 拷贝文件和目录
  14. STC系列51单片机延时程序汇总
  15. MTK 使用iptable 命令来完成网络路由(android WIFI/4G分享网络)
  16. Start Developing iOS Apps (Swift) 中文翻译版
  17. 网络信息安全领域中常见的几个概念
  18. ad20栅格_AD软件的3种栅格设置详解
  19. gitLab数据备份和恢复
  20. 欧姆龙PLC远程上下载实际操作分享

热门文章

  1. 线性代数的本质(第二部分)
  2. wordpress博客设置赞赏和内容会员可见以及跨境电商独立站
  3. www.skymaya.com:8080/index.php,www_skymaya_com
  4. 用Regedit命令控制注册表
  5. Matlab 多项式展开或化简(即提取公因式
  6. WIN10系统连接蓝牙音箱,显示已连接但无声音
  7. 计算方法实验一、秦九韶算法
  8. SpringBoot自动装配
  9. 三月校赛1006 wuli通通和Fibonacci (a[n]=f[n]*(n^m)的前k项和)
  10. quartz 表结构 oracle,Quartz所使用的表的说明