腾讯云存储COS文件上传,无返回、返回预下载的url以及获取文件url(图片)实现

	#需求:作为一个常规功能,我之前使用的是文件上传到文件服务器,将文件写入到文件服务器,然后在数据库存储一条记录信息,记录文件的存储位置。此次使用腾讯云上的cos对象存储保存对象(主要是前端需要显示的图片以及视频),简言之就是上传文件,然后返回url给前端。废话不多说,直接开始:
	首先查询相关资料,发现有一个cos-api的sdk是有文件上传的api的,只是返回是void,跟以前遇到的api上传图片返回url不一样,但是抱着尝试的心态,开始码代码。
	首先引入jar包(注意,这里才是大坑的开始,SDK版本不兼容,需要更新到最新版本),刚开始测试的时候我随便引入了3.2左右版本的,调用api,一直提示unknown host,因为是公司的腾讯云,我获得的信息有限,所以我在测试到一头雾水,查询不到相关信息的时候,自己申请了一个腾讯云账号,这里有工单可以直接提问,会很快有腾讯云工程师进行解答,非常方便。
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114105023504.png)
然后进行了询问,中间说sdk的版本过低,我查找了下,找到5.6.8版本,依然报错unknown host,api调不通,就有点懵逼了。然后将报错信息进行粘贴到工单,得到的回复依然是版本过低,然后建议我的sdk版本升级到5.6.9,当我更想maven之后,就通了,通了,了。。。。。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114105038302.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FjbWtfZmlzaA==,size_16,color_FFFFFF,t_70)
首先实现了第一步,文件长传成功,在桶里能够查看得到。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114105058488.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FjbWtfZmlzaA==,size_16,color_FFFFFF,t_70)
文件乖乖到桶里来了
![在这里插入图片描述](https://img-blog.csdnimg.cn/201911141051143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FjbWtfZmlzaA==,size_16,color_FFFFFF,t_70)
第二步,既然文件上传成功,我想获取文件url,首先我想到的api里面有没有能生成url的api,查看cos-api的demo,发现有一个生成url的方法,然后调用,结果发现这个url是用来生成下载链接的,也就是生成的链接,点击之后直接把文件下载到本地,这不是我想要的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114105130364.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FjbWtfZmlzaA==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191114105146381.png)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用腾讯云官方提供的Java SDK,具体步骤如下: 1. 在pom.xml文件中引入腾讯云cos-java-sdk-v5依赖: ```xml <dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>5.6.19</version> </dependency> ``` 2. 创建腾讯云cos的配置类: ```java @Configuration public class TencentCosConfig { @Value("${tencent.cos.secretId}") private String secretId; @Value("${tencent.cos.secretKey}") private String secretKey; @Value("${tencent.cos.region}") private String region; @Value("${tencent.cos.bucketName}") private String bucketName; @Bean public COSCredentials cosCredentials() { return new BasicCOSCredentials(secretId, secretKey); } @Bean public ClientConfig clientConfig() { ClientConfig clientConfig = new ClientConfig(); clientConfig.setRegion(new Region(region)); return clientConfig; } @Bean public COSClient cosClient() { return new COSClient(cosCredentials(), clientConfig()); } @Bean public String bucketName() { return bucketName; } } ``` 其中,secretId和secretKey是腾讯云提供的访问密钥,region是存储桶所在的地域,bucketName是存储桶的名称。可以在配置文件中配置这些变量,这里用@Value注解获取。 3. 在上传文件的Controller中注入cosClient和bucketName,实现文件上传方法: ```java @RestController public class FileController { @Autowired private COSClient cosClient; @Autowired private String bucketName; @PostMapping("/uploadFile") public String uploadFile(@RequestParam("file") MultipartFile file) throws Exception { ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(file.getSize()); objectMetadata.setContentType(file.getContentType()); String fileName = UUID.randomUUID().toString() + "." + FilenameUtils.getExtension(file.getOriginalFilename()); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, file.getInputStream(), objectMetadata); cosClient.putObject(putObjectRequest); return "https://" + bucketName + ".cos." + "region" + ".myqcloud.com/" + fileName; } } ``` 这里上传文件的方式为MultipartFile类型,使用Apache Commons IO工具类获取文件后缀名,并用UUID生成随机文件名。然后创建PutObjectRequest对象,调用cosClient的putObject方法上传文件,最后将文件URL返回给前端。 希望以上信息能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值