Asp.Net高级文件上传

时间:2012-01-10 23:21:19

标签: c# asp.net file-upload asynchronous

在mvc3网站上使用标准<input type="file" />时,您可以通过创建HttpPostedFile类型的输入参数并将表单设置为enctype="multipart/form-data"来接收操作方法中的文件p>

这种方法的一个问题是请求没有完成,并且在文件的整个内容上传之前不会传递给您的操作方法。

我想在该文件上传到服务器时做一些事情。基本上我想异步接收数据,然后以编程方式逐字节处理数据。

为了实现上述目标,我想你可能需要在HttpModule或自定义HttpHandler中处理这部分请求。我熟悉这些东西是如何工作的,但我不熟悉接收文件上传数据的方法。

我知道这是可能的,因为我过去曾与第三方组件合作(通常这样他们可以报告上传进度,或者将数据缓存到磁盘以避免iis / asp.net内存限制)。不幸的是,我使用的所有组件都是封闭源代码,因此我无法窥视内部并看到它们正在做什么。

我不是在寻找代码,但是有人能让我指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

使用WCF服务,您可以向服务发送文件流。

以下是我使用的服务端接收代码:

int chunkSize = 2048;
byte[] buffer = new byte[chunkSize];

using (System.IO.FileStream writeStream =
    new System.IO.FileStream(file.FullName, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write))
{
    do
    {
        // read bytes from input stream
        int bytesRead = request.FileByteStream.Read(buffer, 0, chunkSize);
        if (bytesRead == 0) break;

        // write bytes to output stream
        writeStream.Write(buffer, 0, bytesRead);
    } while (true);

    writeStream.Close();
}

如果看起来像你想要的那样,请查看CodeProject File Transfer Progress。它详细介绍了我的代码基于。