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



我有一个类

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(流源,我确信MemoryStream:Stream

你能解释一下吗?

尽管没有显示任何相关代码,但我诊断:MemoryStream.Position在最后。这将导致读取返回0字节。

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

相关内容

  • 没有找到相关文章

最新更新