【发布时间】:2017-08-28 11:32:34
【问题描述】:
在学习golang的过程中,我正在尝试编写一个具有多个图片上传功能的网络应用程序。
我正在使用 Azure Blob 存储来存储图像,但我无法将图像从多部分请求流式传输到 Blob 存储。
这是我目前编写的处理程序:
func (imgc *ImageController) UploadInstanceImageHandler(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
reader, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for {
part, partErr := reader.NextPart()
// No more parts to process
if partErr == io.EOF {
break
}
// if part.FileName() is empty, skip this iteration.
if part.FileName() == "" {
continue
}
// Check file type
if part.Header["Content-Type"][0] != "image/jpeg" {
fmt.Printf("\nNot image/jpeg!")
break
}
var read uint64
fileName := uuid.NewV4().String() + ".jpg"
buffer := make([]byte, 100000000)
// Get Size
for {
cBytes, err := part.Read(buffer)
if err == io.EOF {
fmt.Printf("\nLast buffer read!")
break
}
read = read + uint64(cBytes)
}
stream := bytes.NewReader(buffer[0:read])
err = imgc.blobClient.CreateBlockBlobFromReader(imgc.imageContainer, fileName, read, stream, nil)
if err != nil {
fmt.Println(err)
break
}
}
w.WriteHeader(http.StatusOK)
}
在我的研究过程中,我已经阅读了使用 r.FormFile、ParseMultipartForm,但决定尝试学习如何使用 MultiPartReader。
我能够将图像上传到 golang 后端并使用 MultiPartReader 将文件保存到我的机器上。
目前,我可以将文件上传到 Azure,但最终会损坏。文件大小似乎很重要,但显然有些东西不起作用。
我是否误解了如何为 CreateBlockBlobFromReader 创建 io.Reader?
非常感谢任何帮助!
【问题讨论】:
标签: azure go image-uploading azure-blob-storage