上下文
与我的团队一起,我们正在构建一个反向代理来拦截对S3的所有传出请求,以便审核和控制来自不同应用程序的访问。
我们通过流式传输文件内容,成功实现了几乎所有操作。例如,为了使用单个操作上传,我们使用将传入请求的正文(这是一个)流式传输到S3并下载(单部分和多部分风格),我们使用原语从(这是一个)写入响应。s3manager.Uploaderio.Readerio.Copys3.GetObjectOutput.Bodyio.ReadCloser
问题:
我们仍然无法通过流式处理实现的唯一操作是上传部分(在分段上传的上下文中)。问题是需要一个 和 来传递传入请求的正文,你需要在某个位置(例如,在内存中)缓冲它。s3.UploadPartInputaws.ReadSeekCloser
这就是我们到目前为止所拥有的:
func (ph *VaultProxyHandler) HandleUploadPart(w http.ResponseWriter, r *http.Request, s3api s3iface.S3API, bucket string, key string, uploadID string, part int64) {
buf := bytes.NewBuffer(nil)
// here loads the entire body to memory
if _, err := io.Copy(buf, r.Body); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
payload := buf.Bytes()
input := &s3.UploadPartInput{
Bucket: aws.String(bucket),
Key: aws.String(key),
UploadId: aws.String(uploadID),
PartNumber: aws.Int64(part),
Body: aws.ReadSeekCloser(bytes.NewReader(payload)),
}
output, err := s3api.UploadPart(input)
// and so on...
}
问题:
有没有办法将 的传入请求流式传输到 S3?(我的意思是不要将整个身体存储在内存中)。UploadPart
jeck猫
相关分类