gpt4 book ai didi

amazon-web-services - 是否有一个AWS S3 Go API用于读取文件而不是下载文件?

转载 作者:行者123 更新时间:2023-12-01 22:25:45 30 4
gpt4 key购买 nike

在Go 中是否有读取as s3文件的API,我只找到将下载文件到本地计算机的API,然后读取本地下载的文件,但是我需要在流中读取文件(像本地文件)。

我希望能够实时读取文件,例如读取100字节,对100字节执行某些操作,然后读取最后一个文件。
我只找到Go aws s3 API将整个文件下载到本地计算机,并处理下载的本地文件。

我当前的测试代码是这样

func main() {
bucket := "private bucket"
item := "private item"

file, err := os.Create("local path")
if err != nil {
exitErrorf("Unable to open file %q, %v", item, err)
}

defer file.Close()

sess, _ := session.NewSession(&aws.Config{
Region: aws.String(" ")},
)

downloader := s3manager.NewDownloader(sess)

numBytes, err := downloader.Download(file,
&s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(item),
})

// Handle the downloaded file
scanner := bufio.NewScanner(file)

for scanner.Scan() {
// Do something
}
}

我将文件从s3下载到本地计算机,然后打开下载的文件并处理每个字节。

我想知道我是否可以直接从s3中读取文件的每一行(或读取文件的每100个字节)

最佳答案

据我了解,您可能需要一个Range请求才能逐块获取文件。
这是一些伪代码:

// Setup input
input := &s3.GetObjectInput{
Bucket: aws.String(BucketName),
Key: aws.String(Path),
}

// calculate position
input.Range = aws.String(fmt.Sprintf("bytes=%d-%d", Position, Offset))

// Get particular chunk of object
result, err := o.Service().GetObject(input)
if err != nil {
return nil, err
}
defer result.Body.Close()

// Read the chunk
b, err := ioutil.ReadAll(result.Body)

或者,如果在某些情况下一次需要一个文件(我不推荐使用),则只需省略 Range即可。

关于amazon-web-services - 是否有一个AWS S3 Go API用于读取文件而不是下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60034007/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com