programing

Azure 스토리지:크기가 0바이트인 업로드된 파일

megabox 2023. 4. 24. 23:01
반응형

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

반응형