本文章文字介绍部分来自阿里官方文档
阿里10款产品免费试一个月。需要的话自行查看
此文档代码丢失了,有些代码和实际你的需求会不一样,但是我写的代码是对的,请根据需求修改。
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。数据存储到阿里云 OSS 以后,您可以选择标准类型(Standard)的阿里云 OSS 服务作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问类型(Infrequent Access)和归档类型(Archive)的阿里云 OSS 服务作为不经常访问数据的备份和归档。
阿里网站 https://oss.console.aliyun.com
登录之后,点击控制台
mantianluanwu就是我的储存空间名称,新建的没有
注意:首次打开不是这个页面,阿里会让你开通一下。开通之后,要等几分钟才能用,者之间的教程就没有了,应为我是很早就弄得。按照提示来吧。![在这里插入图片描述](https://img-blog.csdnimg.cn/20190426105940151.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNTgzNTk3,size_16,color_FFFFFF,t_70
新建你的储存空间,就像是建立一个包起一个包名一样
名称:随意
区域:随意,但是之后不可再更改,建议在一个距离你的用户进一点的地方
下面的都是默认。
计费方式
根据自己的需求前去购买
我用的是这个
阿里的上传和下载都是需要用流量的,没有买流量是不能用的。买过之后也需要等几分钟。
这两个都可以,但是我闲着麻烦点的是继续使用Access Key
记着画圈的地方下面的id 合key ,忘了在这里还能看见。后期都要用这个
我的代码上传是文件通过服务器传给oss,是私有的,比较安全。把文件名保存到数据库中(注意文件名请自行写一个随机数,oss保存的文件如果名字重复,会被覆盖),下载的时候,把文件名传到页面,页面把值传到方法里面。应为我们的文件是私有的,文件的路径有秘钥,他的url是会变得。
注意支持jdk 1.8或1.8以上的
com.aliyun.oss
aliyun-sdk-oss
2.8.3
如果不是maven项目请自行前去寻找,地址如下
https://help.aliyun.com/document_detail/32009.html?spm=a2c4g.11186623.6.743.8d6fc06dp6ozco
public static void shangchuan() throws IOException {
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "L*********SD";
String accessKeySecret = "ExCm***************wcHF";
String bucketName = "*******";
String objectName = "456.txt";
//objectName 上传文件名
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上传内容到指定的存储空间(bucketName)并保存为指定的文件名称(objectName)。
String content = "Hello OSS";
//content 上传文件内容
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
// 关闭OSSClient。
ossClient.shutdown();
}
urlString:页面传过来的文件名
只要你调这个方法,页面上就会让你选择下载路径
public static void fujianxiazai(HttpServletRequest request,HttpServletResponse response,String urlString) throws IOException {
String endpoint = "*****************";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "*************";
String accessKeySecret = "******************";
String bucketName = "************";
String objectName = urlString;
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition","attachment;filename=" + new String(objectName.getBytes("utf-8"),"ISO8859-1"));
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>oss下载<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
String key = objectName.toString();
key = key.replaceAll("\\\\", "/");
OSSObject object = ossClient.getObject(bucketName, key);
BufferedInputStream input = new BufferedInputStream(object.getObjectContent());
byte[] buffBytes = new byte[1024];
OutputStream outputStream = response.getOutputStream();
int read = 0;
while ((read = input.read(buffBytes)) != -1) {
outputStream.write(buffBytes, 0, read);
}
outputStream.flush();
outputStream.close();
//is.close();
input.close();
ossClient.shutdown();
}
前端代码
这个代码没有连接数据库,如果连接数据库后,前端向后端传一个下载的文件名objectName 后端接收一下就可以了
String endpoint :请根据自己的地址进行修改,不同的区域这个值不一样https://help.aliyun.com/document_detail/31837.html?spm=a2c4g.11186623.2.18.39be45dcOqIV4g#concept-zt4-cvy-5db
图片上传的代码我没有写他和文件上传的代码一样,首先我们上传图片最后遍历我们要知道图片的路径。但是oss对于图片返回url,Bucket 私有的话返回的url有时长限制,可以把Bucket 设置为共读,此时他的路径就不会变了。数据库中存的还是图片名加后缀。
https:// + 储存空间名称.+ endpoint + /文件名
例子
https://mantianluanwu.oss-cn-beijing.aliyuncs.com/17-150122104305.jpg
这就是你的图片路径
public static void fanhuiurl() {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "***************";
String accessKeySecret = "**************";
String bucketName = "**************";
String objectName = "**************";
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 设置URL过期时间为1小时。
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
String ww=url.toString();
String wenwen = ww.substring(0,ww.lastIndexOf('?'));
System.out.println(url);
// 关闭OSSClient。
ossClient.shutdown();
}
你创建的区域不一样,他endpoint 也是不一样的。具体的在下面的网址上面找。选择外网Endpoint
https://help.aliyun.com/document_detail/31837.html?spm=a2c4g.11186623.2.18.39be45dcOqIV4g#concept-zt4-cvy-5db