在JavaScript中上传RESTful文件的解决方案

时间:2012-03-08 15:24:48

标签: ajax rest file-upload

如果这是一个不恰当的问题,我道歉:

我的问题

我正在为利用主要用于JavaScript客户端的文件上传的应用程序创建(或尝试创建)RESTful API。正如你们许多人所知,没有标准的,跨浏览器的方式来使用Ajax上传文件(在iframe method之外)。不幸的是,在我的应用程序中上传文件需要身份验证,因此无法使用不会破坏UI的iframe方法。

我显然可以POST到“https://username:password@myhost/resource”,但凭据可以保存在浏览器中。登出非常困难。

我的解决方案

所以MY解决方案是base64编码。具体如下:

  1. 使用iframe将文件发布到我的脚本(我们称之为base64.php)
  2. 该脚本将文件转换为base 64,然后返回字符串。
  3. 应用程序接受字符串并将其代替文件发送到我的API
  4. API采用base 64字符串并将其转换回文件。
  5. 文件“上传”完成
  6. 基本上,我使用iframe方法将文件发布到脚本中,该脚本接受脚本,对其进行编码并返回字符串。然后我正常使用Base64编码的字符串执行我的ajax请求,而不是文件本身。

    我的问题

    我的问题是,是否有人发现此解决方案存在任何问题?有没有更好的办法?或者我可以做些什么来改善它?

    谢谢!

1 个答案:

答案 0 :(得分:0)

我看到的一个大问题是你的文件上传了两次:首先是base64.php,然后是AJAX - 有效地将你的带宽使用量增加了一倍,因此让用户等待两次上传一个文件。如果您有兴趣,可以在这里找到HTML 5解决方案:http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/