我曾多次在这个网站和其他地方看到 Silverlight 上传示例 这里 的引用,但我有一个关于它是否真的安全的问题。
快速回顾:该代码执行“分块”上传到一个 ASHX 处理程序。UploadFileChunk() 实例化一个 WebClient 并使用 OpenWriteAsync 和 OpenWriteCompletedEventHandler 向服务器发送文件的一些位。WebClient 使用带有两个 QueryString 参数的 URI("filename" 和 "append")与处理程序通信。在向 WebClient 的输出流写入一个分块中的位之后,事件处理程序检查是否已发送所有位,如果没有,则再次调用 UploadFileChunk() 发送另一个分块。
在服务器端,处理程序非常简单-使用 FileStream 将位写入磁盘,如果 append=1 则进行追加,如果 append=0 则创建新文件。
这种架构很可能会导致问题。服务器在接收到下一个请求并开始从下一个块追加位之前,是否保证已经完成了写入位并关闭了文件流?我对Silverlight端的OpenWriteCompletedEventHandler的理解是,当您完成写操作并关闭流时,这并不一定意味着位已经通过网络发送,更不用说被服务器端处理程序处理了。谢谢!