简单上传

最近更新时间: 2024-06-12 15:06:00

适用场景

该操作适用于在单个请求中上传一个小于 5 GB 大小的对象,对于大于 5 GB 的对象,您必须使用分块上传的方式。

当您的对象较大(例如 100 MB)时,我们建议您在高带宽或弱网络环境中,优先使用分块上传的方式。

使用方法

使用 REST API

您可以直接使用 REST API 发起一个简单上传对象请求,可参考 PUT Object 文档说明。

使用 Java SDK

对象存储 COS 的 Java SDK 中提供了此方法,可参考 Java SDK 接口文档 PUT Object 部分 。

步骤说明

  1. 初始化客户端 cosclient。

  2. 执行 putObject 方法上传对象,支持将本地文件或者输入流上传到 COS。

代码示例

  1. PutObjectRequest 封装了简单上传的请求,通过传入本地文件路径以及 COS 路径,支持设置存储类型,权限信息等,上传完成后会返回PutObjectResult ,失败抛出异常。示例代码如下:

    // 1 初始化用户身份信息(secretId, secretKey)
    COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
    // 2 设置bucket的区域, COS地域的简称请参照 /document/product/436/6224
    ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));
    // 3 生成cos客户端
    COSClient cosclient = new COSClient(cred, clientConfig);
    // bucket名需包含appid
    String bucketName = "mybucket-1251668577";
    
    String key = "/aaa/bbb.txt";
    File localFile = new File("src/test/resources/len10M.txt");
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);
    // 设置存储类型, 默认是标准(Standard), 低频(standard_ia), 近线(nearline) 
    putObjectRequest.setStorageClass(StorageClass.Standard_IA);
    try {
        PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
        // putobjectResult会返回文件的etag
        String etag = putObjectResult.getETag();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    }
    
    // 关闭客户端
    cosclient.shutdown();
  2. PutObjectRequest同时支持传入输入流,从流式上传到COS,但需要指定长度,示例代码如下所示:

    // 1 初始化用户身份信息(secretId, secretKey)
    COSCredentials cred = new BasicCOSCredentials("AKIDXXXXXXXX", "1A2Z3YYYYYYYYYY");
    // 2 设置bucket的区域, COS地域的简称请参照 /document/product/436/6224
    ClientConfig clientConfig = new ClientConfig(new Region("ap-beijing-1"));
    // 3 生成cos客户端
    COSClient cosclient = new COSClient(cred, clientConfig);
    // bucket名需包含appid
    String bucketName = "mybucket-1251668577";
    
    String key = "/aaa/bbb.txt";
    File localFile = new File("src/test/resources/len10M.txt");
    
    InputStream input = new ByteArrayInputStream(new byte[10]);
    ObjectMetadata objectMetadata = new ObjectMetadata();
    // 从输入流上传必须制定content length, 否则http客户端可能会缓存所有数据,存在内存OOM的情况
    objectMetadata.setContentLength(10);
    // 设置contenttype默认下载时根据cos路径key的后缀返回响应的contenttype, 上传时设置contenttype会覆盖默认值
    objectMetadata.setContentType("image/jpeg");
    
    PutObjectRequest putObjectRequest =
            new PutObjectRequest(bucketName, key, input, objectMetadata);
    // 设置存储类型, 默认是标准(Standard), 低频(standard_ia), 近线(nearline) 
    putObjectRequest.setStorageClass(StorageClass.Standard_IA);
    try {
        PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);
        // putobjectResult会返回文件的etag
        String etag = putObjectResult.getETag();
    } catch (CosServiceException e) {
        e.printStackTrace();
    } catch (CosClientException e) {
        e.printStackTrace();
    }
    
    // 关闭客户端        
    cosclient.shutdown();