0

借助网络服务将文件上传到网络服务器很容易。这是我通常这样做的方式。这是我的示例代码。

[WebMethod]
public bool UploadFile(string FileName, byte[] buffer, long Offset)
{
bool retVal = false;
try
{
// setting the file location to be saved in the server. 
// reading from the web.config file 
string FilePath = 
Path.Combine(ConfigurationManager.AppSettings["upload_path"], FileName);

if (Offset == 0) // new file, create an empty file
File.Create(FilePath).Close();
// open a file stream and write the buffer. 
// Don't open with FileMode.Append because the transfer may wish to 
// start a different point
using (FileStream fs = new FileStream(FilePath, FileMode.Open, 
FileAccess.ReadWrite, FileShare.Read))
{
fs.Seek(Offset, SeekOrigin.Begin);
fs.Write(buffer, 0, buffer.Length);
}
retVal = true;
}
catch (Exception ex)
{
//sending error to an email id
common.SendError(ex);
}
return retVal;
}

但我想开发 Web 服务,它会给我以百分比上传文件的状态,当文件上传完成时,无论文件是否完全上传,都会在客户端触发一个带有状态消息的事件。我还需要编写可以同时处理多个请求的例程,并且例程必须是线程安全的。所以请指导我如何设计足以满足我所有要求的例程。谢谢

4

1 回答 1

2

我强烈建议您忘记从头开始实现这一点,而是查看现有的可用客户端文件上传解决方案之一 - 大多数都带有一些可以插入现有应用程序的样板 .NET 代码。

我使用了 jQuery Upload 和 plUpload,它们都有可靠的客户端上传管理器,它们通过 HTTP Range 标头上传文件并在此过程中提供上传状态信息。我相信两者都带有 .NET 示例。

这些类型的上传处理程序的服务器端实现涉及接收 HTTP 数据块,这些数据通过一种上传会话 id 标识。客户端发送文件块,每个文件都由这个文件相关的 id 标识,以及一些进度信息,如传输的字节数和总文件大小,以及指示请求状态的状态值。状态让您知道文件何时完全上传。

然后可以根据从客户端传递的唯一 ID 将来自 POST 缓冲区的传入数据写入文件或数据库或其他一些存储机制。因为客户端应用程序正在向服务器发送数据块,所以它可以提供进度信息。如果您使用 plUpload 或 jQuery-Upload 之类的客户端库,它们将提供可定制的 UI。

于 2012-11-26T08:29:17.850 回答