使用java开发阿里云OSS开放云存储服务
来源:互联网 发布:剑桥中国史 知乎 编辑:程序博客网 时间:2024/04/28 14:59
购买了阿里云后,我们发现一般ECS的存储空间都比较小,当然我们可以动态的扩展一些存储空间。但是作为开发者,我们在日常使用中需要一些更大的灵活性,因此就需要我们自己对OSS存储有一些自己的扩展。今天就为大家分享一下如何使用java来对接阿里云的OSS存储服务。
OSS产品概述
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以通过调用 API,在任何应用、任何时间、任何地点上传和下载数据,也可以通过 Web 控制台对数据进行简单的管理。OSS 适合存放任意类型的文件,适合各种网站、开发企业及开发者使用。
开通阿里云OSS服务
首先要登录阿里云官网,然后选择产品——>存储于CDN——>对象存储 OSS。如下图:
然后我们可以根据自己的情况进行开通。开通完成后,我们就可以进入OSS控制台了。
OSS 控制台
OSS控制台布局包括bucket列表,bucket所在地域,创建时间和对于bucket操作。bucket这个概念用比较通俗的说法,就是用户创建的顶层目录,所有用户上传的文件都必须存在bucket下面,而且bucket在OSS系统中是不能重名的。如果已经有一个用户创建了bucket名称叫abc,那么很遗憾,您就不能创建一个名称叫abc的bucket了,每个用户可以创建10个bucket。注意红圈标注的ACCESSKEY管理按钮,点击后可以进行ACCESSKEY管理界面。
进入后点击显示,可以看到秘钥,AccesskeyId&AccessKeySecret 的使用方法请见OSS API文档
点击具体bucket,进入bucket 管理功能,包括bucket属性设置、object管理等。
创建Bucket
如果你还没有创建bucket,点击新建bucket。
进入新建Bucket页面,并填写Bucket信息
填写Bucket名称,选择所属地域,设置读写权限。 在填写完bucket信息后点击提交,创建bucket。
上传文件
点击红圈标注的上传文件,会弹出文件框列表,选择需要上传的文件进行上传。
分享文件
点击对应文件的获取地址,会弹出一个object 地址信息,其中地址链接可以是在公网访问到的。别人点击这个链接就可以下载到这个文件了,但是亲这可是要注意会产生流量费用的。
注意:如你的OSS Bucket未绑定域名,则你访问文件链接后默认为下载该文件,而不能直接浏览该文件。
java开发OSS存储服务
import java.io.IOException;import java.util.Properties;public class OSSConfigure {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;private String accessUrl;public OSSConfigure() {}/** * 通过配置文件.properties文件获取,这几项内容。 * @param storageConfName * @throws IOException */public OSSConfigure(String storageConfName) throws IOException {Properties prop = new Properties();prop.load(this.getClass().getClassLoader().getResourceAsStream("conf/" + storageConfName));endpoint = prop.getProperty("endpoint").trim();accessKeyId = prop.getProperty("accessKeyId").trim();accessKeySecret = prop.getProperty("accessKeySecret").trim();bucketName = prop.getProperty("bucketName").trim();accessUrl = prop.getProperty("accessUrl").trim();}public OSSConfigure(String endpoint, String accessKeyId,String accessKeySecret, String bucketName, String accessUrl) {this.endpoint = endpoint;this.accessKeyId = accessKeyId;this.accessKeySecret = accessKeySecret;this.bucketName = bucketName;this.accessUrl = accessUrl;}public String getEndpoint() {return endpoint;}public void setEndpoint(String endpoint) {this.endpoint = endpoint;}public String getAccessKeyId() {return accessKeyId;}public void setAccessKeyId(String accessKeyId) {this.accessKeyId = accessKeyId;}public String getAccessKeySecret() {return accessKeySecret;}public void setAccessKeySecret(String accessKeySecret) {this.accessKeySecret = accessKeySecret;}public String getBucketName() {return bucketName;}public void setBucketName(String bucketName) {this.bucketName = bucketName;}public String getAccessUrl() {return accessUrl;}public void setAccessUrl(String accessUrl) {this.accessUrl = accessUrl;}}然后再创建一个工具类,这里需要提出的OSS服务器,上所有的都是对象,没有文件夹的概念,上传文件,直接写好路劲,他会自动创建。这里有一个入口OSSClient,很多方法都是通过它来实现的。
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.ObjectListing;import com.aliyun.oss.model.ObjectMetadata;/** * 对OSS服务器进行上传删除等的处理 * */public class OSSManageUtil {/** * 上传OSS服务器文件* @Title: uploadFile * @Description: * @param @param ossConfigure* @param @param file* @param @param remotePath* @param @return* @param @throws Exception 设定文件 * @return String 返回类型 * @throws */public static String uploadFile(OSSConfigure ossConfigure,File file,String remotePath) throws Exception{InputStream fileContent=null;fileContent=new FileInputStream(file);OSSClient ossClient=new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret()); String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\","/")+"/";//创建上传Object的MetadataObjectMetadata objectMetadata=new ObjectMetadata();objectMetadata.setContentLength(fileContent.available());objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");objectMetadata.setContentType(contentType(file.getName().substring(file.getName().lastIndexOf("."))));objectMetadata.setContentDisposition("inline;filename=" + file.getName());//上传文件ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + file.getName(), fileContent, objectMetadata);System.out.println(ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName());return ossConfigure.getAccessUrl()+"/" +remoteFilePath + file.getName();}/** * 根据key删除OSS服务器上的文件* @Title: deleteFile * @Description: * @param @param ossConfigure* @param @param filePath 设定文件 * @return void 返回类型 * @throws */public static void deleteFile(OSSConfigure ossConfigure,String filePath){OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(),ossConfigure.getAccessKeyId(), ossConfigure.getAccessKeySecret());ossClient.deleteObject(ossConfigure.getBucketName(), filePath);} /** * Description: 判断OSS服务文件上传时文件的contentType * @Version1.0 * @param FilenameExtension 文件后缀 * @return String */ public static String contentType(String FilenameExtension){if(FilenameExtension.equals("BMP")||FilenameExtension.equals("bmp")){return "image/bmp";}if(FilenameExtension.equals("GIF")||FilenameExtension.equals("gif")){return "image/gif";}if(FilenameExtension.equals("JPEG")||FilenameExtension.equals("jpeg")|| FilenameExtension.equals("JPG")||FilenameExtension.equals("jpg")|| FilenameExtension.equals("PNG")||FilenameExtension.equals("png")){return "image/jpeg";}if(FilenameExtension.equals("HTML")||FilenameExtension.equals("html")){return "text/html";}if(FilenameExtension.equals("TXT")||FilenameExtension.equals("txt")){return "text/plain";}if(FilenameExtension.equals("VSD")||FilenameExtension.equals("vsd")){return "application/vnd.visio";}if(FilenameExtension.equals("PPTX")||FilenameExtension.equals("pptx")||FilenameExtension.equals("PPT")||FilenameExtension.equals("ppt")){return "application/vnd.ms-powerpoint";}if(FilenameExtension.equals("DOCX")||FilenameExtension.equals("docx")||FilenameExtension.equals("DOC")||FilenameExtension.equals("doc")){return "application/msword";}if(FilenameExtension.equals("XML")||FilenameExtension.equals("xml")){return "text/xml";}return "text/html"; }}好了,到这里OSS的简单开发就已经完成了。由于时间关系,我这里就写到这里,万事开头难,你对OSS有了简单的认识后。官网剩下的一堆api对你来说都是小菜。下面我在说一下在使用过程中遇到的问题和解决方案。
使用OSS存储服务遇到的问题和解决方案
ECS服务器被清洗
当服务器流量达到用户云盾设置的清洗阈值时,会自动进入流量清洗。请注意,由于安全策略无法做到100%识别请求是否恶意,所以服务器被清洗后可能会有低概率的误杀存在,但绝大部分情况下正常请求不会受到影响,如果怀疑有误杀可提交工单由售后支持协助判断。
不同帐号下ECS服务器内网不通
默认情况下,不同帐号下的服务器内网是不通的。如果用户同时有多个帐号,并且多个帐号下都有服务器,那么这些服务器内网是不通的。如果需要不同帐号下内网互通,需要提交工单联系售后,阿里云售后工程师会协助打通内网。请注意,需要内网打通的不同的帐号需要全部提交工单,说明哪些IP和哪些IP进行内网互通,或者帐号下所有服务器内网互通。并且在每一个工单中,都把已经提交的内网互通的工单号列出来(自身的工单号除外),以便阿里云售后工程师进行安全验证。
OSS内存泄漏
oss的callback返回的数据格式非JSON格式
OSS 返回的状态不为200
400或者其他的status比如404/403等是指应用服务器返回给oss的http是400或者404/403等,正常情况下应用服务器必须返回200给OSS。502是由于应用服务器根本就没有起web服务,没有监听OSS发过来的回调请求。- 使用java开发阿里云OSS开放云存储服务
- python oss alioss 使用阿里开放云存储服务
- .Net程序测试阿里云OSS开放存储服务
- 阿里云OSS开放云存储小结
- 阿里云OSS存储开发
- OSS阿里云对象存储服务,java文件操作
- 阿里云OSS(对象存储服务)
- 阿里云OSS存储基于JAVA基本使用(一)
- Java使用阿里云OSS对象存储上传图片
- Java使用阿里云OSS对象存储上传图片
- 阿里云OSS存储开发(一)
- 阿里云的OSS对象存储 java
- 阿里云对象存储服务,OSS使用经验总结,图片存储,分页查询
- 阿里云OSS开发
- 阿里云 OSS开发使用文档
- 阿里云学习一 - 开始于OSS云存储服务
- 利用nc 直观理解阿里云OSS 存储服务
- 阿里云OSS对象存储服务购买与基础使用指南
- 支付宝支付iOS
- uniq命令
- JAVA 堆和栈
- 秒杀系统架构优化思路
- 天工架构
- 使用java开发阿里云OSS开放云存储服务
- 判断控件图片或背景图片是否被更改
- 55. spring boot 服务配置和部署【从零开始学Spring Boot】
- MAC OX 配置JDK环境变量
- Java中Map的遍历
- 命令设计模式(Command Pattern)
- 【图书资料】x86、i386、amd64、ia64的区别
- 认识Html、JS、CSS的关系
- 多线程测试的坑