我有一个类

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 source 并且我确定 MemoryStream : Stream )

你可以解释吗 ?

最佳答案

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

10-06 09:11