如果我使用MemoryStream,它为什么Azure UploadFromStream不起作用(它工作但长度等于0)?

时间:2016-03-30 11:05:03

标签: azure stream bytearray azure-storage azure-storage-blobs

我有一个班级

public class TextCorpusFile
{
    public int Id {get; set;}
    public string FileType {get; set;}
    public MemoryStream File {get; set;}
}

如果我尝试将文件上传到Azure Blob存储,则文件长度等于0.(文件已创建,但长度为0)

public void SendTextCorpusFileData(TextCorpusFile textCorpusFile)
{
    //get container by default 
    CloudBlobContainer textCorpusContainer =
        ReturnTextCorpusFileContainer();

    CloudBlockBlob blockBlob = textCorpusContainer.GetBlockBlobReference(textCorpusFile.Id + POINT + textCorpusFile.FileType);

    blockBlob.UploadFromStream(textCorpusFile.File);

}

但是如果我按字节发送文件,它运行良好,长度不是0.

public void SendTextCorpusFileData(TextCorpusFile textCorpusFile)
{
    //get by default
    CloudBlobContainer textCorpusContainer =
        ReturnTextCorpusFileContainer();

    CloudBlockBlob blockBlob = textCorpusContainer.GetBlockBlobReference(textCorpusFile.Id + POINT + textCorpusFile.FileType);

    blockBlob.UploadFromByteArray(textCorpusFile.File.ToArray(),
        0,
        (int)textCorpusFile.File.Length);
}

为什么它的工作原理我无法理解(因为UploadFromStream(Stream源码,我确信 MemoryStream:Stream

你能解释一下吗?

2 个答案:

答案 0 :(得分:8)

虽然没有显示任何相关代码,但我确诊:MemoryStream.Position已结束。这会导致读取返回0个字节。

答案 1 :(得分:0)

我遇到了同样的问题,在调用UploadFromStream之前将内存流的位置设置为0.