开发者社区> 问答> 正文

go sdk从数据流中读取数据上传

已解决

展开
收起
2018-04-04 14:50:22 873 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    从数据流(io.Reader)中读取数据上传

    通过Bucket.PutObject完成简单上传。

    提示:

    • 简单上传的示例代码在sample/put_object.go

    字符串上传

        import "strings"
        import "github.com/aliyun/aliyun-oss-go-sdk/oss"
    
        client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
        if err != nil {
            // HandleError(err)
        }
    
        bucket, err := client.Bucket("my-bucket")
        if err != nil {
            // HandleError(err)
        }
    
        err = bucket.PutObject("my-object", strings.NewReader("MyObjectValue"))
        if err != nil {
            // HandleError(err)
        }
    

    byte数组上传

        import "bytes"
        import "github.com/aliyun/aliyun-oss-go-sdk/oss"
    
        client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
        if err != nil {
            // HandleError(err)
        }
    
        bucket, err := client.Bucket("my-bucket")
        if err != nil {
            // HandleError(err)
        }
    
        err = bucket.PutObject("my-object", bytes.NewReader([]byte("MyObjectValue")))
        if err != nil {
            // HandleError(err)
        }
    

    文件流上传

        import "os"
        import "github.com/aliyun/aliyun-oss-go-sdk/oss"
    
        client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
        if err != nil {
            // HandleError(err)
        }
    
        bucket, err := client.Bucket("my-bucket")
        if err != nil {
            // HandleError(err)
        }
    
        fd, err := os.Open("LocalFile")
        if err != nil {
            // HandleError(err)
        }
        defer fd.Close()
    
        err = bucket.PutObject("my-object", fd)
        if err != nil {
            // HandleError(err)
        }
    

    根据本地文件名上传

    通过Bucket.PutObjectFromFile可以上传指定的本地文件,把本地文件内容作为Object的值。

        import "github.com/aliyun/aliyun-oss-go-sdk/oss"
    
        client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
        if err != nil {
            // HandleError(err)
        }
    
        bucket, err := client.Bucket("my-bucket")
        if err != nil {
            // HandleError(err)
        }
    
        err = bucket.PutObjectFromFile("my-object", "LocalFile")
        if err != nil {
            // HandleError(err)
        }
    

    注意:

    • 使用上述方法上传最大文件不能超过5G。如果超过请使用分片上传。

    上传时指定元信息

    使用数据流上传文件时,用户可以指定一个或多个文件的元信息。元数据的名称大小写不敏感,比如用户上传文件时,定义名字为“name”的meta,使用Bucket.GetObjectDetailedMeta读取结果是:“X-Oss-Meta-Name”,比较/读取时请忽略大小写。

    可以指定的元信息如下:

    参数 说明
    CacheControl 指定该Object被下载时的网页的缓存行为。
    ContentDisposition 指定该Object被下载时的名称。
    ContentEncoding 指定该Object被下载时的内容编码格式。
    Expires 指定过期时间。用户自定义格式,建议使用http.TimeFormat格式。
    ServerSideEncryption 指定oss创建object时的服务器端加密编码算法。合法值:AES256。
    ObjectACL 指定oss创建object时的访问权限。
    Meta 自定义参数,以"X-Oss-Meta-"为前缀的参数。
        import (
            "strings"
            "time"
            "github.com/aliyun/aliyun-oss-go-sdk/oss"
        )
    
        client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
        if err != nil {
            // HandleError(err)
        }
    
        bucket, err := client.Bucket("my-bucket")
        if err != nil {
            // HandleError(err)
        }
    
        expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
        options := []oss.Option{
            oss.Expires(expires),
            oss.ObjectACL(oss.ACLPublicRead),
            oss.Meta("MyProp", "MyPropVal"),
        }
        err = bucket.PutObject("my-object", strings.NewReader("MyObjectValue"), options...)
        if err != nil {
            // HandleError(err)
        }
    

    提示:

    • Bucket.PutObject、Bucket.PutObjectFromFile、Bucket.UploadFile、Bucket.UploadFile都支持上传时指定元数据。

    创建模拟文件夹

    OSS服务是没有文件夹这个概念的,所有元素都是以文件来存储。但给用户提供了创建模拟文件夹的方式,如下代码:

        import "strings"
        import "github.com/aliyun/aliyun-oss-go-sdk/oss"
    
        client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
        if err != nil {
            // HandleError(err)
        }
    
        bucket, err := client.Bucket("my-bucket")
        if err != nil {
            // HandleError(err)
        }
    
        err = bucket.PutObject("my-dir/", strings.NewReader(""))
        if err != nil {
            // HandleError(err)
        }
    

    提示:

    • 创建模拟文件夹本质上来说是创建了一个空文件。
    • 对于这个文件照样可以上传下载,只是控制台会对以"/"结尾的文件以文件夹的方式展示。
    • 所以用户可以使用上述方式来实现创建模拟文件夹。
    • 而对文件夹的访问可以参看文件夹功能模拟
    2018-04-07 22:03:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
gohbase :HBase go客户端 立即下载
Go构建日请求千亿级微服务实践 立即下载
一个跨平台的云服务SDK需要什么 立即下载