ASP.Net:用简历写文件块.HTTP文件上传

时间:2010-01-15 06:36:27

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

请参阅问题:Resume in upload file control

现在要找到上述问题的解决方案,我想开发它并开发一个可以恢复HTTP文件上传过程的用户控件。

为此,我将在服务器上创建一个临时文件,直到上传完成。完成上传后,只需将其保存到所需位置即可。

我想到的程序是:

  1. 在服务器上创建一个具有唯一名称(可能是GUID)的临时文件。
  2. 读取一大块文件并将其附加到服务器上的此临时文件中。
  3. 继续执行步骤1至3,直到达到EOF。
  4. 现在,如果连接丢失或用户点击pause按钮,则会停止写入文件,并且不会删除临时文件。
  5. 再次点击“恢复”或再次上传同一文件,将在服务器上检查文件是否存在,用户是resume还是overwrite。 (不确定如何检查它是否是同一个文件。另外,如何将块从客户端发送到服务器。
  6. 点击resume将从需要上传的位置开始,并将其附加到服务器上的文件中。 (再次不确定如何做到这一点。
  7. 问题:

    1. 这些步骤是否正确以实现目标?或者需要一些修改?
    2. 我不确定如何实施所有这些步骤。 :-(需要想法,链接......
    3. 任何帮助表示赞赏...

1 个答案:

答案 0 :(得分:2)

你所尝试的并不容易,但它是可行的。请遵循以下准则:

  1. 使用ajax在客户端编写2个函数:

    • getUploadedPortionFromServer(filename) - 这将询问服务器文件是否存在,并且应该从服务器获得xml响应,其中包含以下信息:
      boolean(exist/not exist)size(bytes)md5(string)
      该函数还将运行与本地文件上的服务器相同大小的md5,
      如果md5相同,则可以从停止点继续发送,
      elseif不一样或大小== 0,重新开始。
    • uploadFromBytes(x) - 将取决于第一个功能。

  2. 在服务器上,您必须编写匹配的函数,这些函数将检查所需的内容,并通过XML将响应发送给客户端。

    • 为了拥有不同的文件名,您应该使用某种用户标记。
    • 用户是否已登录您的服务器?如果是这样,请使用附加到文件名的用户名哈希,这将有助于您区分文件。
    • 如果没有,请使用cookie。