golang을 배우는 과정에서 여러 이미지 업로드 기능을 가진 웹 앱을 작성하려고합니다.Golang은 멀티 파트를 통해 이미지를 처리하고 Azure로 스트리밍을합니다.
저는 Azure Blob Storage를 사용하여 이미지를 저장하고 있지만 Blob Storage에 대한 멀티 파트 요청에서 이미지를 스트리밍하는 데 문제가 있습니다. 여기
는 지금까지 작성한 핸들러입니다 :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를 만드는 방법을 오해하고 있습니까?
도움을 주시면 감사하겠습니다.
안녕하세요. 답변 해 주셔서 감사합니다. 나는 부분적으로 CreateBlockBlobFromReader에 직접 전달할 수 있는지 확인하려고했으나 몸 길이가 0이고 따라서 Content-Length와의 불일치가 있다고 Azure에서 오류가 발생합니다 ('읽음'으로 전달하는 내용). . 왜 그런지 아십니까? 나는 직접적으로 다시 통과하려고 노력할 것이다. –
Andrew는 Peter의 도움이되는 답변을 참조하십시오. – Mark