COS对象存储服务的使用

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: ---------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/53639792作者:朱培      ID:sdksdk0  
---------------------------------------------------------------------------------------------
[版权申明:本文系作者原创,转载请注明出处] 
文章出处: http://blog.csdn.net/sdksdk0/article/details/53639792
作者:朱培      ID:sdksdk0     

--------------------------------------------------------------------------------------------

在很多图片上传以及文件上传下载操作的时候,我之前一直使用的是nginx在服务器中划分出一个静态的文件服务器,我主要用于存放图片。然后因为某种原因,然后我换成了COS。

官网的简介是这样的:

对象存储服务(Cloud Object Service)是面向企业和个人开发者提供的高可用,高稳定,强安全的云端存储服务。您可以将任意数量和形式的非结构化数据放入COS,并在其中实现数据的管理和处理。COS支持标准的Restful API接口,您可以快速上手使用,按实际使用量计费,无最低使用限制。


然后我最开始是抱着死马当活马医的心态来使用的,进度上面要求我是要尽快完成的,而且我发现对于我这种小网站来说使用这个COS服务基本上是免费的,简直就是捡到宝的感觉,哈哈!所以我就赶紧放弃了我的nginx图片服务器。然后去github上面下载他们的官方文档。

https://github.com/tencentyun/cos-java-sdk-v4

在在里面有个demo.java,然后直接拿过来用就行了。因为我项目上传的图片是要按年月日自动生成目录来存放的,所以官方提供的那段代码是非常不够用的。

maven坐标是:

<dependency>
				<groupId>com.qcloud</groupId>
				<artifactId>cos_api</artifactId>
				<version>4.2</version>
			</dependency>

一般在真实项目中只导入这个是不行的,还需要加入http的jar包,所以还需要:而且这个版本还要匹配,否则在本地localhost的时候是可以用的,但是一道服务器上就会说你少jar包了。

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpmime</artifactId>
			<version>4.3.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.3.1</version>
		</dependency>

资源初始化:


// 设置用户属性, 包括appid, secretId和SecretKey
        // 这些属性可以通过cos控制台获取(https://console.qcloud.com/cos)
        long appId = 1000000;
        String secretId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
        String secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
        // 设置要操作的bucket
        String bucketName = "xxxxxxxxx";
        // 初始化客户端配置
        ClientConfig clientConfig = new ClientConfig();
        // 设置bucket所在的区域,比如广州(gz), 天津(tj)
        clientConfig.setRegion("gz");
        // 初始化秘钥信息
        Credentials cred = new Credentials(appId, secretId, secretKey);
        // 初始化cosClient
        COSClient cosClient = new COSClient(clientConfig, cred);


我只使用了其中的文件上传功能:


// 1. 上传文件(默认不覆盖)
        // 将本地的local_file_1.txt上传到bucket下的根分区下,并命名为sample_file.txt
        // 默认不覆盖, 如果cos上已有文件, 则返回错误
        String cosFilePath = "/sample_file.txt";
        String localFilePath1 = "src/test/resources/bigfile.txt";
        UploadFileRequest uploadFileRequest =
                new UploadFileRequest(bucketName, cosFilePath, localFilePath1);
        uploadFileRequest.setEnableSavePoint(false);
        uploadFileRequest.setEnableShaDigest(false);
        String uploadFileRet = cosClient.uploadFile(uploadFileRequest);
        System.out.println("upload file ret:" + uploadFileRet);

这段代码只是一个入门程序,所以在我们实际应用中肯定是需要进行修改的。例如我图片上传的吧,进来的是一个二进制流文件,总不能用String来接收吧,所以我将其改变了一下:

我传进去的是一个MultipartFile。所以接收我需要一个byte[].非常方便就改好了。

MultipartFile uploadFile

 // 1. 上传文件(默认不覆盖)
	        // 将本地的local_file_1.txt上传到bucket下的根分区下,并命名为sample_file.txt
	        // 默认不覆盖, 如果cos上已有文件, 则返回错误
	        String cosFilePath = "/images"+imagePath+"/"+newName;
	        byte[] localFilePath1 = uploadFile.getBytes();
	        UploadFileRequest uploadFileRequest =
	                new UploadFileRequest(bucketName, cosFilePath, localFilePath1);
	        uploadFileRequest.setEnableSavePoint(false);
	        uploadFileRequest.setEnableShaDigest(false);
	        String uploadFileRet = cosClient.uploadFile(uploadFileRequest);

那么我需要按年月日来生成目录,所以我需要这样。

// 生成一个新的文件
			// 取原始文件名
			String oldName = uploadFile.getOriginalFilename();
			// 生成新文件名
//		UUID.randomUUID();
			String newName = IDUtils.genImageName();
			newName = newName + oldName.substring(oldName.lastIndexOf("."));
			// 图片上传
			String imagePath = new DateTime().toString("/yyyy/MM/dd");

所以完整代码就如下了:


@Override
	public Map uploadPicture(MultipartFile uploadFile) {
		Map resultMap = new HashMap();
		
		try {
			// 生成一个新的文件
			// 取原始文件名
			String oldName = uploadFile.getOriginalFilename();
			// 生成新文件名
//		UUID.randomUUID();
			String newName = IDUtils.genImageName();
			newName = newName + oldName.substring(oldName.lastIndexOf("."));
			// 图片上传
			String imagePath = new DateTime().toString("/yyyy/MM/dd");

			  // 设置用户属性, 包括appid, secretId和SecretKey
	        // 这些属性可以通过cos控制台获取(https://console.qcloud.com/cos)
	       long appId = 1000000;
        String secretId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";
        String secretKey = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
        // 设置要操作的bucket
        String bucketName = "xxxxxxxxx";
	        // 初始化客户端配置
	        ClientConfig clientConfig = new ClientConfig();
	        // 设置bucket所在的区域,比如广州(gz), 天津(tj)
	        clientConfig.setRegion("gz");
	        // 初始化秘钥信息
	        Credentials cred = new Credentials(appId, secretId, secretKey);
	        // 初始化cosClient
	        COSClient cosClient = new COSClient(clientConfig, cred);
	        ///////////////////////////////////////////////////////////////
	        // 文件操作 //
	        ///////////////////////////////////////////////////////////////
	        // 1. 上传文件(默认不覆盖)
	        // 将本地的local_file_1.txt上传到bucket下的根分区下,并命名为sample_file.txt
	        // 默认不覆盖, 如果cos上已有文件, 则返回错误
	        String cosFilePath = "/images"+imagePath+"/"+newName;
	        byte[] localFilePath1 = uploadFile.getBytes();
	        UploadFileRequest uploadFileRequest =
	                new UploadFileRequest(bucketName, cosFilePath, localFilePath1);
	        uploadFileRequest.setEnableSavePoint(false);
	        uploadFileRequest.setEnableShaDigest(false);
	        String uploadFileRet = cosClient.uploadFile(uploadFileRequest);
			
	        //System.out.println("upload file ret:" + uploadFileRet);
			
			
	        String json=JsonUtils.objectToJson(uploadFileRet);
			//System.out.println(json.toString());
			
			
			resultMap.put("error", 0);
			resultMap.put("url", IMAGE_BASE_URL +"/images"+imagePath+"/"+newName);
			
			
			return resultMap;
		} catch (Exception e) {
			resultMap.put("error", 1);
			resultMap.put("message", "文件上传发生异常");
			return resultMap;
		}
	}

这个IMAGE_BASE_URL就是这个对象存储的位置。例如你随便上传一个文件的时候,都会给你一个文件的地址的前缀部分。




完成之后可以在控制台查看,或者网址访问,如果需要图片的时候,就把这个url拿出用即可,例如我就是放在img标签的src里就可以直接使用了。




前面的工具类IDUtils.java


public class IDUtils {

	/**
	 * 图片名生成
	 */
	public static String genImageName() {
		//取当前时间的长整形值包含毫秒
		long millis = System.currentTimeMillis();
		//long millis = System.nanoTime();
		//加上三位随机数
		Random random = new Random();
		int end3 = random.nextInt(999);
		//如果不足三位前面补0
		String str = millis + String.format("%03d", end3);
		
		return str;
	}
}






总结:使用对象存储服务是一种非常高效便捷的方式,而且使用起来还是挺简单的。点个赞。



相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
存储 监控 文件存储
存储之外,还有什么?云计算对象存储服务OSS深度洞察
存储之外,还有什么?云计算对象存储服务OSS深度洞察
654 0
|
存储 安全 对象存储
如何简单快速搭建自己的云对象存储服务(OSS)
简单来说,其实我们只需要有一台服务器,利用服务器的各种资源,搭配其它厂商开发的软件,就能很轻易拥有自己的云对象存储服务。不需要在阿里云上花钱买什么服务,甚至还能自己给别人提供服务,真的是太爽了。
|
2月前
|
存储 Java 开发工具
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
阿里云OSS(Object Storage Service)是一种安全、可靠且成本低廉的云存储服务,支持海量数据存储。用户可通过网络轻松存储和访问各类文件,如文本、图片、音频和视频等。使用OSS后,项目中的文件上传业务无需在服务器本地磁盘存储文件,而是直接上传至OSS,由其管理和保障数据安全。此外,介绍了OSS服务的开通流程、Bucket创建、AccessKey配置及环境变量设置,并提供了Java SDK示例代码,帮助用户快速上手。最后,展示了如何通过自定义starter简化工具类集成,实现便捷的文件上传功能。
【三方服务集成】最新版 | 阿里云OSS对象存储服务使用教程(包含OSS工具类优化、自定义阿里云OSS服务starter)
|
7月前
|
Oracle 关系型数据库 数据处理
实时计算 Flink版产品使用合集之写入OSS是否要开通oss-hdfs服务
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
60 1
|
4月前
|
存储 机器学习/深度学习 弹性计算
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
阿里云EMR数据湖文件系统问题之OSS-HDFS全托管服务的问题如何解决
|
5月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之多个业务流程上传同名资源到同一个OSS(对象存储服务)URL,会产生什么问题
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
运维 Serverless 数据处理
函数计算产品使用问题之在对象存储服务(OSS)上创建ZIP包解压触发器后,触发器未按预期执行,一般是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
Cloud Native Java 开发工具
云原生 阿里云分布式文件系统 对象存储OSS 服务配置
【1月更文挑战第8天】云原生 阿里云分布式文件系统 对象存储OSS 服务配置
|
7月前
|
存储 JSON 前端开发
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析
207 0