本文介绍如何查询CSV和JSON文件。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心
  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见Go初始化
  • 要查询文件,您必须具有oss:GetObject权限。具体操作,请参见为RAM用户授权自定义的权限策略
  • OSS仅支持查询CSV文件和JSON文件,不支持查询其他格式的文件。

示例代码

  • 查询CSV文件

    以下代码用于查询CSV文件。

    package main
    
    import (
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "io/ioutil"
        "os"
    )
    
    func main() {
        // 创建OSSClient实例。
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // 填写Bucket名称,例如examplebucket。
        bucket,err := client.Bucket("examplebucket")
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampledata.csv。
        key := "exampledir/exampledata.csv"
        // 填写本地CSV文件的完整路径,例如D:\\localpath\\exampledata.csv。
        localCsvFile := "D:\\localpath\\exampledata.csv"
        err = bucket.PutObjectFromFile(key, localCsvFile)
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    
        selReq := oss.SelectRequest{}
        // 使用SELECT语句查询文件中的数据。
        selReq.Expression =  `select * from ossobject`
        body,err := bucket.SelectObject(key, selReq)
    
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // 读取内容。
        fc,err  := ioutil.ReadAll(body)
    
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        defer body.Close()
        fmt.Println(string(fc))
    }                    
  • 查询JSON文件

    以下代码用于查询JSON文件。

    package main
    
    import (
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "io/ioutil"
        "os"
    )
    
    func main() {
        // 创建OSSClient实例。
        // yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // 填写Bucket名称,例如examplebucket。
        bucket,err := client.Bucket("examplebucket")
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampledata.json。
        key := "exampledir/exampledata.json"
        // 填写本地JSON文件的完整路径,例如D:\\localpath\\exampledata.json。
        localJsonFile := "D:\\localpath\\examplepdata.json"
        err = bucket.PutObjectFromFile(key, localJsonFile)
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
    
        selReq := oss.SelectRequest{}
        // 使用SELECT语句查询文件中的数据。
        selReq.Expression =  `select * from ossobject`
        body,err := bucket.SelectObject(key, selReq)
    
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        // 读取内容。
        fc,err  := ioutil.ReadAll(body)
    
        if err != nil {
            fmt.Println("Error:", err)
            os.Exit(-1)
        }
        defer body.Close()
        fmt.Println(string(fc))
    }                    

相关文档

  • 关于查询文件的完整示例代码,请参见GitHub示例
  • 关于查询文件的API接口说明,请参见SelectObject