package com.example.cos.services.impl;
import cn.hutool.core.util.StrUtil;
import com.example.cos.config.CosConfig;
import com.example.cos.services.ICosFileService;
import com.example.cos.vo.RestApiResponse;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.CannedAccessControlList;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
/**
* @author phf
*/
@Slf4j
@Service
public class ICosFileServiceImpl implements ICosFileService {
@Resource
private COSClient cosClient;
@Resource
private CosConfig cosConfig;
@Override
@Transactional(rollbackFor = Exception.class)
public RestApiResponse<String> upload(MultipartFile[] files) {
RestApiResponse<String> response = RestApiResponse.success();
String res = "";
try {
for (MultipartFile file : files) {
String originalFileName = file.getOriginalFilename();
// 获得文件流
InputStream inputStream = null;
inputStream = file.getInputStream();
// 设置文件路径
String filePath = getFilePath(originalFileName, "你的桶内文件路径abc/def/test/");
// 上传文件
String bucketName = cosConfig.getBucketName();
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.getSize());
objectMetadata.setContentType(file.getContentType());
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, filePath, inputStream, objectMetadata);
cosClient.putObject(putObjectRequest);
cosClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
String url = cosConfig.getPath() + "/" + filePath;
res += url + ",";
}
String paths = res.substring(0, res.length() - 1);
response.setData(paths);
return response;
} catch (IOException e) {
e.printStackTrace();
} finally {
cosClient.shutdown();
}
return RestApiResponse.fail();
}
@Override
public RestApiResponse<Void> delete(String fileName) {
cosConfig.cosClient();
// 文件桶内路径
String filePath = getDelFilePath(fileName, "你的桶内文件路径abc/def/test/");
cosClient.deleteObject(cosConfig.getBucketName(), filePath);
return RestApiResponse.success();
}
/**
* 生成文件路径
* @param originalFileName 原始文件名称
* @param folder 存储路径
* @return
*/
private String getFilePath(String originalFileName, String folder) {
// 获取后缀名
String fileType = originalFileName.substring(originalFileName.lastIndexOf("."));
// 以文件后缀来存储在存储桶中生成文件夹方便管理
String filePath = folder + "/";
// 去除文件后缀 替换所有特殊字符
String fileStr = StrUtil.removeSuffix(originalFileName, fileType).replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5]", "_");
filePath += new DateTime().toString("yyyyMMddHHmmss") + "_" + fileStr + fileType;
log.info("filePath:" + filePath);
return filePath;
}
/**
* 生成文件路径
* @param originalFileName 原始文件名称
* @param folder 存储路径
* @return
*/
private String getDelFilePath(String originalFileName, String folder) {
// 获取后缀名
String fileType = originalFileName.substring(originalFileName.lastIndexOf("."));
// 以文件后缀来存储在存储桶中生成文件夹方便管理
String filePath = folder + "/";
// 去除文件后缀 替换所有特殊字符
String fileStr = StrUtil.removeSuffix(originalFileName, fileType).replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5]", "_");
filePath += fileStr + fileType;
log.info("filePath:" + filePath);
return filePath;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
springboot+cos文件存储快速整合,包含上传和下载,只需补充自己的腾讯云配置信息和自己的桶内路径即可完成demo,复用极快 腾讯云配置信息配置在application.yml配置文件中,如果存在编码问题,请手动更改IDEA配置,设置application.yml文件为utf-8 主要逻辑在service中,需要替换自己的桶内文件存储路径 上传时对文件重新命了名,所以在删除时,需要调整命名为存储后的命名,不然找不到文件 demo中的文件上传用的是多文件上传,参数是文件数组+循环,将数组改为文件对象,去掉For循环,即可完成单个文件上传接口
资源推荐
资源详情
资源评论
收起资源包目录
springboot+cos文件存储 (255个子文件)
009af65223496f334b30ecb6c63fa1cbed2dba 79B
0150d46ae80ef22bf2115131ed63d533031a82 45B
02a9d696a5702efd9ba292b36bbf09639b6e24 209B
0366d36a60b56ae7a828ebd9c043ed4b311f72 69B
08dce8a52a76c41e35df263703d3b0dd73b8bb 1KB
12cdee96a35e8f60f116a17eefe67440b53fbb 75B
2a7dad6ff15f1bdb8dd4a1c8d07facb32e9cf1 881B
2cf372eeae7fdc97fc7f72174e824be2d22dd3 80B
2d1c7f3aa58aa9c9d0373c14fd7c8b67934cea 45B
30ca79957d184d67cdd9b19a60dd616f9a9d41 69B
32daeea939046b1341479aa1198c0d300b8cdf 75B
341b4400cac445769de7dc0aa378aae8645ca0 46B
3a4df904806b2a3c4a9126dc2d7552ba51123c 117B
3c84624f847cdf6889e8b5f50edc947fea5aad 185B
41681f69b4bfdd3288308e88eb126829252088 191B
4181df19bfaf5f07a7cf5459ab80b1369740b3 91B
4329e6c667ea27cb996c3c03845ee3da06119a 80B
44eb2e9e062773db9246ead6793a48506a35c4 69B
46cf5f4db69977aaa05997d01706cfcd9d94b7 68B
481e167040c5ce6484e3c8ac64daa248ca9b6c 49B
4b657f922e1e88507a87fac5b6f74979a9c96d 1KB
4cbb8c253900d243bd03cb58508f09ec21e199 49B
4fdeb086bc6821d9bd9c2826f70133b46fe250 1KB
50094a570cc8f49f018cf1d2903ef32268c962 60B
5672a37dd5f30ab9cdcee29a7415737eb1f561 45B
5760aec5eaf34a2a1c8f563387b5a162beb875 117B
5a476ad8eaab609884ac017c0afcab25f63c4d 186B
5a5210ddeeebaa189dceed6e52e907152b2dc4 322B
5d175c59e472117b126e74960afb58e37c753a 75B
5d440a5b2d256eb5c40bbcda8c4df22afbb986 49B
5f13c45fa8547b18632cc57b1c94c39c968326 69B
647ef28984811aee825aefeac3e1f87b3288b0 46B
648dded74a1b93f31f85d4601a0583068fc64a 45B
65accb6729392b1c43434f1e4244b597b932e0 50B
6739f665d952f7855bba1fa39ebb524b3d46a0 45B
6976539f98894a83b3a290ccb3632617f84412 1KB
6a4e8da3ff41a0f99a063057191560a7be006e 185B
6b7798958cf74a9ecbda80a84e06c3fa0cc6cf 117B
6bf3ac9c17a24ec4699f90f1da8febf57550a9 49B
6c093b7121231fce3258cc7e8ac81731c6de73 45B
6c428fcb92d159c99a0dc5ab0af6351af09691 118B
70078faf443b2a77d2031f57a760bf8775083f 117B
722a36a9fefc0cd2b8ff8373d0a9ed315adb59 45B
76f107f12a40c56851f5441e6593981a491be9 68B
774eb8c15b72dea5b6ff9959cfef5701e81244 75B
776c83e8276c7ec03e05dc2dd57f8323ef90c2 63B
7a97fc34dea92e2ec2c154b64b4d2c919f558a 75B
7b2509dcb55c5fdfb9d9b0c0b180124e9fac17 187B
7b8493ed9b0d6f4b31a97044e8709a719fb9d2 187B
8061e10262be8886c048a54d6ffd25752587c2 175B
88ba58fd271a7425f119b78f343fb7eecfd3e7 96B
91e27d62a18a150a479a632d1b33a57889b7bb 301B
96536ef8e88ee972f03869f80ea05f87b69fcb 95B
972379b55d044449af6aab293e5b57b4356191 59B
9bf118f2417ab7fbe2dc5d3029f0fb1db4ce0b 187B
9ca41150e2940dc87fdf91359d69d380101c8b 117B
9d06b298844584f5c4ee587ce95a5676c6fb03 45B
9d56e07bd237a673999ad9a6e0537be2bf92a4 79B
9e00a2a96fa9d7c5dbc9859664a78d980158c2 249B
a2915948c9e3a0c1dbf7392e479eaecc5ad7bc 60B
a5d268c361d6f6484d20bd35500b699dd01e14 672B
a70ebe3044ba37a767f9af8a933898138f6449 186B
a94a95b793f8210ddddf700da451d275389a2a 46B
aaa31875cdcd98a09f64b1206e88ba80895c01 70B
af5f0fccd4bd8d9271223c1d17d4dac148b752 525B
b0a6bfb942d4130212bf1a8e7ff2edc06d58b4 95B
b5b3b3bcf2261b1efdffa19cb1bea458593e5d 79B
b641ff76564638c6be6b406208bdd5a6bbec80 95B
b6556cdb232ede7f8216269419e5e5b7bd1f8c 182B
ba70bf25e0446a19f609e45cdd296ac11f34bc 460B
c93e10f93978eaf41b6e4d5c369ebc126874c9 173B
c9bc05f29a6fdd30e9248b6c08e5a6c0fdee64 168B
ICosFileServiceImpl.class 5KB
CosConfig.class 4KB
RestApiResponse.class 3KB
SwaggerConfig.class 3KB
ICosFileController.class 2KB
CosApplicationTests.class 770B
CosApplication.class 728B
ICosFileService.class 596B
mvnw.cmd 7KB
COMMIT_EDITMSG 18B
config 395B
d49c6a2c26d34c4d5c825d06addcb989a6836f 69B
d88bc4a7616c3bab513dfbfa4529897efd9bec 187B
dc844834a70e368f5007fd880af4e8964de229 117B
de019227109b250859b964fc182617dfe368bc 69B
deb42f6f7f4e627e2a2bc72a72eaadb2054139 45B
description 73B
dev 148B
dev 41B
e07694010f878bf5054d0435a921477d7dcaeb 739B
e2166130a03e107d935676fa317b149cff8207 310B
e3e9149ea9c002dfd27dc8bd367cdd1c5acf91 95B
e557ef510b7f990b14d1e8583a54d50111b077 79B
e70fde97776fcddfcb07302ed641e192b937a9 45B
e88a02e1dfd715e314e0a48500b352beb3e5d0 74B
e912bfbe17dbd5fc01e52ba8fd698c80555ad4 45B
e98db309c44a91977b780da0a5018b9075df10 309B
e9be53116fdc8e2b5c82650d9f8f363be2e1b9 74B
共 255 条
- 1
- 2
- 3
资源评论
daydayday...
- 粉丝: 8701
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功