java实现上传文件到腾讯云的存储桶详细过程

通过java的sdk实现源文件云储存

业务场景

系统中实现上传数据报表excel,由于业务场景比较的频繁,项目应用的服务器上不对原始文件进行保存,解析完毕之后数据持久化到数据库中,需要对源文件进行删除操作,当出现问题的时候,无法定位到到底是程序问题,还是数据问题,这样原始文件就必须保留,所以客户要求我们对报表解析完毕之后,需要上传到他们腾讯云的存储桶里面,这样源文件在保存两年之后、他们回去做删除操作。

我这里需要做的就是通过腾讯云提供的sdk连接腾讯云的存储桶,并实现文件上传的操作。
当然,这里腾讯云的api还提供了,构建存储桶,查询存储桶,以及上传文件的上传、查询、下载、删除等操作

工作驱动学习,让我恐惧的不是恐惧本身,而是对恐惧的未知。

对腾讯云存储桶的理解

类似于文件服务平台,其实是一样的,你完全可以自己公司内部、构建一个文件服务平台,只是腾讯云做的更好,稳定性以及提供了完整的sdk工具,以及各种语言的api文档。这样开发者就能够把精力放在开发核心业务上,而不需要关注购买机器,构建文件服务平台以及后期运维,对于小公司这样是得不偿失的。

开发过程

腾讯云存储桶的javaSdk的API参考文档地址:javaSdk

  • 我在项目中抽象了一个操作腾讯云存储桶的工具类:ConnectTencentCloud
    首先通过构造方法初始化连接的客户端COSClient如下图所示
    在这里插入图片描述
  • 这里相关的配置信息,是可以通过配置文件进行手动配置的,如下图
    在这里插入图片描述
  • 下面是核心的上传代码实现
 /**
   * 
   * @describe 上传文件的方法
   * @methods uploadObject 方法名
   * @parameter  fileUrl 上传文件地址
   * @parameter  fileKey 文件对象名称
   * @parameter @return 对象列表
   */
  public PutObjectResult uploadObject(String fileUrl, String fileKey) {
      try {
          // 指定要上传的文件
          File localFile = new File(fileUrl);
          // fileKey 指定要上传到 COS 上对象键
          PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileKey, localFile);
          PutObjectResult  putObjectResult = cosClient.putObject(putObjectRequest);
          return putObjectResult;
      } catch (CosServiceException serverException) {
          	log.error(serverException.getErrorMessage());
          	throw  new RuntimeException("上传文件平台Server异常"+serverException.getErrorMessage());
      } catch (CosClientException clientException) {
              log.error(clientException.getMessage());
              throw  new RuntimeException("上传文件平台Client异常"+clientException.getMessage());
      }
     
  }
  • 为了确认上传,这里额外写了一个查询是否已经成功上传的对象查询的方法,如果是自己的存储桶完全没必要,直接登录点击查看即可,如下图所示(腾讯云的网页客户端)
    存储桶:在这里插入图片描述
  • 控制台查看存储对象:
    在这里插入图片描述
  • 为了方便测试、这里写了一个main方法,将上传以及查询的方法先静态化,测试成功,再去除静态化。
public static void main(String[] args) {
      ConnectTencentCloud  connectTencentCloud=new  ConnectTencentCloud();
      connectTencentCloud.uploadObject("有效文件本地环境地址","文件key");
      connectTencentCloud.queryObjectList();
  }
  • 到这里其实我的业务场景已经完全实现了。
  • 但是由于我这边1元购买了COS的一个月,所以就趁机把构建存储桶,查询储存桶,以及桶中对象的上传,下载,删除,查询等都完全实现了,代码相对完成,仅供参考,如下
  /**
   * 改存储桶已经在前端界面进行创建 创建存储桶测试成功
   */
  public void createCosBucket() {
      String bucket = "examplebucket-1250000000";
      CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucket);
      // 设置 bucket 的权限为 PublicRead(公有读私有写), 其他可选有私有读写, 公有读写
      createBucketRequest.setCannedAcl(CannedAccessControlList.PublicRead);
      try {
          Bucket bucketResult = cosClient.createBucket(createBucketRequest);
      } catch (CosServiceException serverException) {
          serverException.printStackTrace();
      } catch (CosClientException clientException) {
          clientException.printStackTrace();
      }
  }
  
  /**
   * 查询存储桶列表 已经测试、成功
   * 
   * @return
   */
  public List<Bucket> queryBucketList() {
      List<Bucket> buckets = null;
      try {
          buckets = cosClient.listBuckets();
          System.out.println(buckets);
      } catch (CosServiceException serverException) {
          serverException.printStackTrace();

      } catch (CosClientException clientException) {
          clientException.printStackTrace();
      }
      return buckets;
  }
  /**
   * 下载对象、测试成功
   */
  public void downLoadObject() {
      try {
          // 指定对象所在的存储桶
          String bucketName = "examplebucket-1250000000";
          // 指定对象在 COS 上的对象键
          String key = "cos_zhaoxw";
          // 指定要下载到的本地路径
          File downFile = new File("F://");
          GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
          ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest, downFile);
      } catch (CosServiceException serverException) {
          serverException.printStackTrace();
      } catch (CosClientException clientException) {
          clientException.printStackTrace();
      }
  }

  /**
   * 删除对象 测试成功
   */
  public void deleteObjectRequest() {
      try {
          // 指定对象所在的存储桶
          String bucketName = "examplebucket-1250000000";
          // 指定对象在 COS 上的对象键
          String key = "exampleobject";
          cosClient.deleteObject(bucketName, key);
      } catch (CosServiceException serverException) {
          serverException.printStackTrace();
      } catch (CosClientException clientException) {
          clientException.printStackTrace();
      }
  }
  • 本想是想接上个月的继续把nginx代理服务器给详细记录下学习内容,可是无奈因为工作比较忙,只能写一点手头的内容。关于nginx的只能等有时间继续整理了。
  • 工作驱动学习是最好的,因为当你喜欢的和你工作发生冲突时,永远是工作要紧,因为喜欢不会给你带来money,但是工作会!!!!
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用腾讯云COS存储进行文件上传和下载的示例代码,其中包括了配置密钥的部分。 ``` import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.auth.BasicCOSCredentials; import com.qcloud.cos.model.ObjectMetadata; import com.qcloud.cos.region.Region; import com.qcloud.cos.transfer.TransferManager; import com.qcloud.cos.transfer.Upload; import com.qcloud.cos.transfer.Download; import java.io.File; public class COSDemo { private static final String SECRET_ID = "yourSecretId"; private static final String SECRET_KEY = "yourSecretKey"; private static final String REGION_NAME = "yourRegionName"; private static final String BUCKET_NAME = "yourBucketName"; public static void main(String[] args) { // 初始化 COS 客户端 BasicCOSCredentials credentials = new BasicCOSCredentials(SECRET_ID, SECRET_KEY); ClientConfig clientConfig = new ClientConfig(new Region(REGION_NAME)); COSClient cosClient = new COSClient(credentials, clientConfig); // 初始化 TransferManager TransferManager transferManager = new TransferManager(cosClient); // 上传文件 String key = "test.txt"; File localFile = new File("/path/to/local/file"); ObjectMetadata objectMetadata = new ObjectMetadata(); Upload upload = transferManager.upload(BUCKET_NAME, key, localFile, objectMetadata); try { upload.waitForCompletion(); System.out.println("File uploaded successfully."); } catch (InterruptedException e) { System.err.println("Failed to upload file: " + e.getMessage()); } // 下载文件 Download download = transferManager.download(BUCKET_NAME, key, new File("/path/to/local/file")); try { download.waitForCompletion(); System.out.println("File downloaded successfully."); } catch (InterruptedException e) { System.err.println("Failed to download file: " + e.getMessage()); } // 关闭 COS 客户端和 TransferManager transferManager.shutdownNow(); cosClient.shutdown(); } } ``` 在上面的代码中,你需要将 `yourSecretId` 和 `yourSecretKey` 替换为腾讯云账号的 SecretId 和 SecretKey,将 `yourRegionName` 替换为存储所在地域的名称,将 `yourBucketName` 替换为存储的名称。 另外,你需要将 `/path/to/local/file` 替换为本地文件的路径。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值