阿里对象存储 OSS 文件上传下载,图片上传java

前言

本文章文字介绍部分来自阿里官方文档

阿里10款产品免费试一个月。需要的话自行查看

此文档代码丢失了,有些代码和实际你的需求会不一样,但是我写的代码是对的,请根据需求修改。

阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿里云 OSS。数据存储到阿里云 OSS 以后,您可以选择标准类型(Standard)的阿里云 OSS 服务作为移动应用、大型网站、图片分享或热点音视频的主要存储方式,也可以选择成本更低、存储期限更长的低频访问类型(Infrequent Access)和归档类型(Archive)的阿里云 OSS 服务作为不经常访问数据的备份和归档。

创建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

在这里插入图片描述
这两个都可以,但是我闲着麻烦点的是继续使用Access Key
在这里插入图片描述
记着画圈的地方下面的id 合key ,忘了在这里还能看见。后期都要用这个
在这里插入图片描述

文件上传和下载

安装sdk

我的代码上传是文件通过服务器传给oss,是私有的,比较安全。把文件名保存到数据库中(注意文件名请自行写一个随机数,oss保存的文件如果名字重复,会被覆盖),下载的时候,把文件名传到页面,页面把值传到方法里面。应为我们的文件是私有的,文件的路径有秘钥,他的url是会变得。
注意支持jdk 1.8或1.8以上的

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>2.8.3</version>
</dependency>

如果不是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();

	}

前端代码

<input type="button" onclick="downloadImage()" value="下载">
<script>
   function downloadImage(){
        location.href="controller方法地址+文件名";
   }
</script>

这个代码没有连接数据库,如果连接数据库后,前端向后端传一个下载的文件名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
这就是你的图片路径

返回url方法

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 也是不一样的。具体的在下面的网址上面找。选择外网Endpoint 在这里插入图片描述
https://help.aliyun.com/document_detail/31837.html?spm=a2c4g.11186623.2.18.39be45dcOqIV4g#concept-zt4-cvy-5db

发布了17 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43583597/article/details/89574297