Azure 스토리지:크기가 0바이트인 업로드된 파일
이미지 파일을 BLOB에 업로드하면 이미지가 정상적으로 업로드 됩니다(오류 없음).클라우드 스토리지 스튜디오에 가면 파일이 있지만 크기가 0바이트입니다.
사용하고 있는 코드는 다음과 같습니다.
// These two methods belong to the ContentService class used to upload
// files in the storage.
public void SetContent(HttpPostedFileBase file, string filename, bool overwrite)
{
CloudBlobContainer blobContainer = GetContainer();
var blob = blobContainer.GetBlobReference(filename);
if (file != null)
{
blob.Properties.ContentType = file.ContentType;
blob.UploadFromStream(file.InputStream);
}
else
{
blob.Properties.ContentType = "application/octet-stream";
blob.UploadByteArray(new byte[1]);
}
}
public string UploadFile(HttpPostedFileBase file, string uploadPath)
{
if (file.ContentLength == 0)
{
return null;
}
string filename;
int indexBar = file.FileName.LastIndexOf('\\');
if (indexBar > -1)
{
filename = DateTime.UtcNow.Ticks + file.FileName.Substring(indexBar + 1);
}
else
{
filename = DateTime.UtcNow.Ticks + file.FileName;
}
ContentService.Instance.SetContent(file, Helper.CombinePath(uploadPath, filename), true);
return filename;
}
// The above code is called by this code.
HttpPostedFileBase newFile = Request.Files["newFile"] as HttpPostedFileBase;
ContentService service = new ContentService();
blog.Image = service.UploadFile(newFile, string.Format("{0}{1}", Constants.Paths.BlogImages, blog.RowKey));
이미지 파일이 스토리지에 업로드되기 전에 HttpP Posted FileBase의 Property InputStream은 정상으로 나타납니다(이미지의 크기는 예상된 크기와 일치합니다).예외는 없습니다).
그리고 정말 이상한 점은 이 기능이 다른 경우(Power Points 또는 Worker 역할의 다른 이미지 업로드)에 완벽하게 작동한다는 것입니다.SetContent 메서드를 호출하는 코드는 0바이트의 새 파일이 올바른 위치에 생성되기 때문에 동일한 코드와 파일이 올바른 것으로 보입니다.
제안해 주실 분 없나요?이 코드를 수십 번 디버깅해도 문제가 보이지 않습니다.어떤 제안이라도 환영합니다!
감사해요.
HttpPostedFileBase의 InputStream의 Position 속성은 Length 속성과 같은 값을 가지고 있었습니다(아마 이 파일 이전에 다른 파일이 있었던 것 같습니다.studpy라고 생각합니다!).
Position 속성을 0(제로)으로 되돌리기만 하면 됩니다.
나는 이것이 미래에 누군가에게 도움이 되기를 바란다.
Fabio가 이 문제를 제기하고 당신 자신의 문제를 해결해줘서 고마워요.당신이 말한 것에 코드를 추가하고 싶을 뿐이에요.당신의 제안은 나에게 완벽하게 통했다.
var memoryStream = new MemoryStream();
// "upload" is the object returned by fine uploader
upload.InputStream.CopyTo(memoryStream);
memoryStream.ToArray();
// After copying the contents to stream, initialize it's position
// back to zeroth location
memoryStream.Seek(0, SeekOrigin.Begin);
이제 다음을 사용하여 memoryStream을 업로드할 준비가 되었습니다.
blockBlob.UploadFromStream(memoryStream);
언급URL : https://stackoverflow.com/questions/2905754/azure-storage-uploaded-files-with-size-zero-bytes
'programing' 카테고리의 다른 글
WPF: 개체를 ComboBox에 바인드하는 방법 (0) | 2023.04.24 |
---|---|
Angular 프로젝트에 이미지(및 기타 자산)를 로드하는 방법 (0) | 2023.04.24 |
서브모듈을 분리하려면 어떻게 해야 하나요? (0) | 2023.04.24 |
오류: 서비스가 잘못되었습니다. (0) | 2023.04.24 |
메서드 매개 변수를 변경할 수 있도록 신속하게 설정하시겠습니까? (0) | 2023.04.24 |