开发者社区> 问答> 正文

如何通过把流保存到OSS

如下:假如有一方法把流保存到OSS
public void putFile(String objectname, InputStream is)
{
     ObjectMetadata objectMeta = new ObjectMetadata();
             objectMeta.setContentLength(xxx);
             client.putObject(bucket, objectname, is, objectMeta);
}
这里objectMeta如何设置setContentLength?有没有 client.putObject(bucket, objectname, is)的方法,类似S3store?

展开
收起
ap0543v5p 2013-01-29 19:55:26 7593 0
2 条回答
写回答
取消 提交回答
  • Re如何通过把流保存到OSS
    setContentLength 必须在请求发起之前设置,也就是意味着你无法把一个未知大小的流放到OSS里, 如果流的大小 已知,比如你是从文件创建的inputstream, 在读取文件的时候可以获得大小,在这时设置contentlength的HTTP头。

    2楼说的用multi_upload上传的话,记的但OSS有个限制,每个块(除了最后一个块之外)最小不可以小于4M 也就是 4*1024 *1024.
    2013-01-31 21:43:45
    赞同 展开评论 打赏
  • Re如何通过把流保存到OSS
    你好, 可以这样做, 由于目前SDK不支持流式传输, 自己可以这样做
    public void putFile(String objectname, InputStream is)
    {
          init_multi_part ()
          while (is.eof())
         {
              data = is.read(100)
              upload_part (data, 100)
         }
        complete_upload()
        
    }

    大概这样的过程。。 即自己分块上传,用multi_upload来传数据
    2013-01-31 20:41:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
百问百答-OSS (下) 立即下载
百问百答-OSS (上) 立即下载
阿里云 JindoFS+OSS 数据上云实战 立即下载