如何在javascript中完成漂亮而简单的文件上传?

如何在javascript中完成漂亮而简单的文件上传?,javascript,ajax,file-upload,Javascript,Ajax,File Upload,我想要的是: 选择一个文件 小进度条(除非不简单) 客户端的失败/成功确认 在服务器端触发操作 所有这些都不需要重新加载页面 除此之外,越简单越好 这段代码非常受欢迎。有大量的脚本和教程。例如,检查显然,这并不像人们想象的那么简单,因为您不能只获取包含标记的表单主体,然后提交它 但是,您可以使用另一个的目标提交表单,然后使用XMLHttpRequest对象轮询服务器进行状态更新,但是,这要求处理上载的服务器端脚本以异步方式进行更新,否则,只有在文件完全上载后,您才能获得状态更新,不是您想要的

我想要的是:

  • 选择一个文件
  • 小进度条(除非不简单)
  • 客户端的失败/成功确认
  • 在服务器端触发操作
  • 所有这些都不需要重新加载页面
除此之外,越简单越好


这段代码非常受欢迎。

有大量的脚本和教程。例如,检查显然,这并不像人们想象的那么简单,因为您不能只获取包含
标记的表单主体,然后提交它

但是,您可以使用另一个
的目标提交表单,然后使用XMLHttpRequest对象轮询服务器进行状态更新,但是,这要求处理上载的服务器端脚本以异步方式进行更新,否则,只有在文件完全上载后,您才能获得状态更新,不是您想要的那种进度状态更新。我认为到目前为止,这对大多数web框架来说都是一个挑战,但我从来没有任何理由深入研究它。听起来很有趣

如果您只想独立于实际表单提交文件,您也可以这样做,但不必担心进度状态更新

您可以做的是,在上载完成后,用包含最近上载文件的服务器端ID的
替换
。这样,当用户点击“保存”时,您就知道实际要保存哪些文件


这个隐藏的东西也可以是一个复选框,它可以让你撤销文件上传,只需在点击save之前取消选中该复选框。

使用XMLHttpRequest对象上传文件在所有浏览器中都是不可能的(只有Firefox和Safari/Chrome支持它),所以对于跨浏览器实现,请使用
技巧

如果你想要一个真正的XHR文件上传,我已经写了一篇关于如何在Firefox3中上传的文章。它的级别非常低,实际上您必须从JavaScript字符串构建实际的HTTP请求。

可能适合