阿里云对象存储服务OSS使用记录
1 新人免费开通OSS服务
-
访问 阿里云官网,登录账号(个人新用户账号),首页搜索 对象存储OSS,点击下方的直达。
-
点击立即开通,此时会在一个新网页中完成开通
-
完成开通后,回到原来的网页,点击下方的新人特惠,会跳转到本页的下方。
-
根据登录的账号是个人新用户,还是企业新用户,可以免费试用三个月。由于我这里是个人新用户,以下操作都为个人新用户的操作。
-
点击上图第一个的立即购买,会跳出详情页面,一般默认即可。
-
点击立即购买,跳转到确认订单页面,点击去支付,完成支付。
-
如果提示未完成协议签署,则点击签署并下单
-
完成支付后,会出现支付成功的界面
-
点击其中管理控制台,跳转到对象存储的管理台界面,点击资源包管理,可以看到刚刚购买成功的资源包。
至此,获得了可以白嫖三个月的OSS服务。
2 使用OSS服务
-
创建一个新的Bucket,并作如下设置
注意:此处的存储类型选择为标准存储,因为刚获得的资源包是标准存储包
-
手动上传一个文件,测试一下
提示上传成功。
在文件列表中,找到上传图片的详情,点击
出现详情页面,在浏览器中输入该URL,如果能出现下载界面则证明能成功访问。
-
参考文档,根据参考文档在Java应用中使用OSS
3 在Java中使用OSS
-
安装依赖
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.15.1</version> </dependency>
-
根据文档,写图片上传的Controller方法,通过swagger测试
注意:把代码中的 * 修改成自己账号对应的值
package com.sun.controller; 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.GetObjectRequest; import com.aliyun.oss.model.PutObjectRequest; import com.aliyun.oss.model.PutObjectResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; @RestController @RequestMapping("/oss") @Api(value = "test oss", tags = "test oss") public class OssTest { @PostMapping("/upload") @ApiOperation("upload file test") public void upload(MultipartFile file) { // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 String endpoint = "***"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 String accessKeyId = "***"; String accessKeySecret = "***"; // 填写Bucket名称,例如examplebucket。 String bucketName = "***"; // 填写Object完整路径。Object完整路径中不能包含Bucket名称。 String objectName = "13213213exampleobject.jpg"; // 图片上传之后的名字 // 填写本地文件的完整路径,例如D:\\localpath\\example-resize.jpg。如果指定的本地文件存在会覆盖,不存在则新建。 String localPath = "C:\\Users\\admin\\Desktop\\Services\\weizhi1.jpg"; // 要上传的本地文件的地址 // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { InputStream inputStream = new FileInputStream(localPath); // 图片输入流 // 创建PutObjectRequest对象。 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); // 设置该属性可以返回response。如果不设置,则返回的response为空。 putObjectRequest.setProcess("true"); // 创建PutObject请求。 PutObjectResult result = ossClient.putObject(putObjectRequest); // 如果上传成功,则返回200。 System.out.println(result.getResponse().getStatusCode()); } 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()); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
-
启动项目,在swagger中测试
控制台输出200,表示上传图片操作成功。
登录管理台查看,文件确实上传成功了。
4 总结
-
在Java程序中使用OSS服务需要提供
endpoint、accessKeyId、accessKeySecret、bucketName
四个量。前三个用于创建ossclient对象,OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
,最后一个用于确定上传的图片放在哪个bucketname下边。 -
需要先构造一个PutObjectRequest或者GetObjectRequest,然后通过ossclient调用putObject(put请求)/getObject(get请求)。
-
// 创建 put请求 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); // 调用这个put请求,返回请求的result结果 PutObjectResult result = ossClient.putObject(putObjectRequest);