阿里电子商务迄今是中国最大的电商网站,各个厂商都在去模仿。就像google的大数据处理,hadoop的思想等等,只有做出了一些成绩,起了带头羊,那么将会是非常吃香的。从今天开始简单学习了解一下阿里的各种云服务。今天先看一下OSS。
OSS(Open Storage Service)开放云存储服务,是阿里云对外的提供的海量,安全和高可靠的云存储服务。目前阿里的所有云服务都是收费,大家可以到官网上了解:http://www.aliyun.com/product/oss
OSS,通俗一点理解就像是一块硬盘用来存储东西呢,只不过,它是由很多服务器,通过类似负载均衡,raid等各种技术,搭建起来的云存储,类似我们经常使用的百度云盘,360云盘等。我们可以将我们服务,数据存放上去,方便,安全,实现云。好了,简单来说,OSS,既然是存储东西用的,我们就需要学会像类似IO流对电脑硬盘操作一样,学习一下对OSS云存储的上传,删除等操作。
首先是开通OSS服务器后,会有endpoint,跟地址;accessKeyId,类似用户名;accessKeySecret,类似密码;buketName:第一层文件夹的名字,一个用户可以创建十个bucketName,类似于我们的C,D,E,F盘符;accessUrl,很明显用户可以通过浏览器访问的地址。例如我们上传一个html文件,我们就可以通过"accessUrl/bucketName/目录/文件名.html,来进行访问。我在这里负责一个是页面静态化的功能,将动态的JSP页面生成静态的html页面,然后上传的OSS服务器,返回地址,让用户直接访问静态页面,这样就大大加快访问的速度。这里突然想到一点不沾边的话语“物极必反,否极泰来”,最开始是单纯的静态页面,我们一直追求动态页面,现在又需要转会到静态页面,各有各的好处,所以技术这东西,没有一个好与不好,只是针对方面不同而已了。
好,首先需要我们创建一个OSS信息实体类,OSSConfigure.java:
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服务器进行上传删除等的处理
* @ClassName: OSSManageUtil
* @Description:
* @author liujh
* @date 2015-3-26 上午10:47:00
*
*/
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的Metadata
ObjectMetadata 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";
}
}
当然这里仅仅写了两个通用方法,我们可以在官网上下载对应的API,来进行查询学习,其实挺简单的。
反思一下吧,最近学习的少了,可能和加班有关系,更大的是自己的心态吧,调整好心态继续努力吧。
分享到:
相关推荐
golang阿里云oss图片上传
Unity接入阿里云SMS&OSS、腾讯云COS教程.rar
阿里云OSS对象云存储上传控件仿百度webuploader插件
阿里云OSS图形界面软件 ossBrowser.jar 方便快捷管理阿里云oss所有的资源,类似ftp界面一下拖动上传下载。。。
阿里云oss上传照片js 、jquery,源代码,下载 阿里云oss上传照片js 、jquery,源代码,下载
阿里云OSS桌面连接工具,可视化界面,可直接托拉拽。。。
阿里云青岛节点oss服务报错解决方式 The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. endpoint 根据自己选择的节点...
阿里云oss桌面客户端工具,阿里云oss桌面客户端工具,阿里云oss桌面客户端工具,阿里云oss桌面客户端工具,可以直连oss服务器,轻松实现文件批量上传下载
阿里云国内不错的开放云服务器,阿里云提供了开放存储服务(OSS),非常方便!
该SDK使用Delphi/Object Pascal编程语言编写,完整实现了阿里云OSS API的全部功能,并提 供了两套API:第一套API(类名:TAliOss)仿照OSS PHP SDK实现了全部函数,第二套API( 类名:TAliOssFileSystem)封装了...
微信小程序上传图片到阿里云oss、主要注释都写在js文件里了,相信你们都看的懂哈、你的域名下的/cbb文件下的/当前年月日文件下的/图片.png
静态资源阿里云oss 上传
阿里云Javascript直传OSS代码;
阿里云服务,文件上传,OSS
destoon推出了应用商店,其中的一个功能就是对象存储,不过要普及版以上用户才能使用,...至于又拍云,阿里云OSS,确实没有测试到过,又拍云没用过,阿里云自己用官方sdk测试 并参照官方代码写了(如有雷同,纯属巧合)
基于plupload封装 支持html5,flash,silverlight,html4 等协议上传 可以运行在PC浏览器,手机浏览器,微信 可以选择多文件上传 显示上传进度条
适用于PbootCMS网站管理系统v3.1.2。图片资源接入七牛云、阿里云OSS;加速图片资源展示。
用C#写的,阿里云对象存储OSS操作例子及辅助类,满足对阿里云OSS的基本操作。
阿里云 golang 版本 oss sdk