如何最佳实践地将文件上传存储到MemoryStream(C#)?

3

我需要将文件上传临时存储到MemoryStream中。

在asp.net (3.5)中,最好的方法是什么?

这是我目前的代码。它可以工作(在本地测试),但我觉得不太对。

protected void lnkUploadFile_Click(object sender, EventArgs e)
    {
        MemoryStream memStream = new MemoryStream();

        BinaryWriter sWriter = new BinaryWriter(memStream);

        foreach (byte b in flUpload.FileBytes)
        {
            sWriter.Write(b);
        }

        sWriter.Flush();

        // writing to file to verify file stream converted correctly
        FileStream fstream = new FileStream(@"C:/test/" + flUpload.FileName, FileMode.Create);          
        memStream.WriteTo(fstream);         
        fstream.Dispose();

        memStream.Dispose();
    }
4个回答

4
如果flUpload.FileBytes是一个字节数组,您可以使用接受包含数据参数的MemoryStream构造函数:
MemoryStream memStream = new MemoryStream(flUpload.FileBytes);

如果它只是实现了IEnumerable接口,那么你可以使用Linq将其转换为字节数组:

MemoryStream memStream = new MemoryStream(flUpload.FileBytes.ToArray());

第二个对我有用。谢谢。 - Taylor Brown

1
    protected void lnkUploadFile_Click(object sender, EventArgs e)
    {
        using (MemoryStream memStream = new MemoryStream(flUpload.FileBytes))
        {
            using (FileStream fstream = new FileStream(@"C:/test/" + 
                flUpload.FileName, FileMode.Create))
            {
                memStream.WriteTo(fstream);
            }
        }
    }

0

作为字符串可能更容易处理...我猜这取决于你打算用它做什么。

System.IO.StreamReader reader = new System.IO.StreamReader("path");
string file = reader.ReadToEnd();

或者如果您需要字节,实际上有一个代码片段“filReadBin”可用,它会产生以下结果:

byte[] fileContents;
fileContents = System.IO.File.ReadAllBytes(@"C:\Test.txt");

0

只需要三行代码。

if (flUpload.FileName.Length > 0)
{
   string directoryPath="C:\\SomeFolderName";
   flUpload.SaveAs(directoryPath + "\\" + fileUpload.FileName);
}

问题是关于MemoryStream而不是文件的。 - mosheb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接