SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码
目录
- 1、开通腾讯云对象存储服务
- 2、创建存储桶
- 3、密钥管理,新建密钥
- 4、yml配置密钥、COS信息
- 5、COSConfig配置类
- 6、COS文件上传工具类
- 7、Controller测试上传接口:
- 8、PostMan接口调用
- 9、浏览器预览效果
所以,一般上规模的项目、或者追求用户体验的项目可能会考虑使用第三方的云服务来存储,市场主流厂商有:七牛云、阿里云OSS、腾讯云COS等,具体采用哪种存储方案需结合项目、规模、成本等因素,综合考量确定。
因为用的腾讯云服务器,为了方便统一管理,所以直接用了腾讯云的COS对象存储服务,下面是基于SpringBoot和腾讯云COS提供的Java SDK快速对接实现文件上传功能。
1、开通腾讯云对象存储服务 https://console.cloud.tencent.com/cos5
2、创建存储桶
文章图片
3、密钥管理,新建密钥
文章图片
4、yml配置密钥、COS信息
cos:baseUrl: fxxxxxa-1xxxxx1.cos.ap-shanghai.myqcloud.comaccessKey: AKxxxxxxxxxxxxxxxxxxxxxxxxxCFsecretKey: oKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxniregionName: ap-shanghaibucketName: fxxxxxa-1xxxxx1folderPrefix: /files
5、COSConfig配置类
@Data@Component@ConfigurationProperties(prefix = "cos")public class COSConfig {private String baseUrl; private String accessKey; private String secretKey; private String regionName; private String bucketName; private String folderPrefix; }
6、COS文件上传工具类
/** * 腾讯云COS文件上传工具类 */@Slf4jpublic class COSClientUtil { /*** 获取配置信息*/private static COSConfig cosConfig = SpringBeanUtils.getBean(COSConfig.class); /*** 初始化用户身份信息*/private static COSCredentials cred = new BasicCOSCredentials(cosConfig.getAccessKey(), cosConfig.getSecretKey()); /*** 设置bucket的区域*/private static ClientConfig clientConfig = new ClientConfig(new Region(cosConfig.getRegionName())); /*** 生成COS客户端*/private static COSClient cosClient = new COSClient(cred, clientConfig); /*** 上传文件** @param file* @return* @throws Exception*/public static String upload(MultipartFile file) throws Exception {String date = DateUtils.formateDate(new Date(), "yyyy-MM-dd"); String originalFilename = file.getOriginalFilename(); long nextId = IdGenerator.getFlowIdWorkerInstance().nextId(); String name = nextId + originalFilename.substring(originalFilename.lastIndexOf(".")); String folderName = cosConfig.getFolderPrefix() + "/" + date + "/"; String key = folderName + name; File localFile = null; try {localFile = transferToFile(file); String filePath = uploadFileToCOS(localFile, key); log.info("upload COS successful: {}", filePath); return filePath; } catch (Exception e) {throw new Exception("文件上传失败"); } finally {localFile.delete(); }} /*** 上传文件到COS** @param localFile* @param key* @return*/private static String uploadFileToCOS(File localFile, String key) throws InterruptedException {PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), key, localFile); ExecutorService threadPool = Executors.newFixedThreadPool(8); // 传入一个threadPool, 若不传入线程池, 默认TransferManager中会生成一个单线程的线程池TransferManager transferManager = new TransferManager(cosClient, threadPool); // 返回一个异步结果Upload, 可同步的调用waitForUploadResult等待upload结束, 成功返回UploadResult, 失败抛出异常Upload upload = transferManager.upload(putObjectRequest); UploadResult uploadResult = upload.waitForUploadResult(); transferManager.shutdownNow(); cosClient.shutdown(); String filePath = cosConfig.getBaseUrl() + uploadResult.getKey(); return filePath; } /*** 用缓冲区来实现这个转换, 即创建临时文件* 使用 MultipartFile.transferTo()** @param multipartFile* @return*/private static File transferToFile(MultipartFile multipartFile) throws IOException {String originalFilename = multipartFile.getOriginalFilename(); String prefix = originalFilename.split("\\.")[0]; String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); File file = File.createTempFile(prefix, suffix); multipartFile.transferTo(file); return file; } }
7、Controller测试上传接口:
/*** 腾讯云COS上传** @param file* @return* @throws Exception*/@PostMapping(value = "https://www.it610.com/cosUpload")public ResponseEntity cosUpload(MultipartFile file) throws Exception {String filePath = COSClientUtil.upload(file); UploadDTO dto = UploadDTO.builder().filePath(filePath).build(); return ResultVOUtil.success(dto); }
8、PostMan接口调用
文章图片
9、浏览器预览效果
文章图片
【SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码】到此这篇关于SpringBoot整合腾讯云COS对象存储实现文件上传的示例代码的文章就介绍到这了,更多相关SpringBoot腾讯云COS文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 腾讯视频(我有一段rap想给你说)
- Spring|Spring Boot 整合 Activiti6.0.0
- springboot使用redis缓存
- springboot整合数据库连接池-->druid
- SpringBoot中YAML语法及几个注意点说明
- springboot结合redis实现搜索栏热搜功能及文字过滤
- springboot中.yml文件的值无法读取的问题及解决