我正在为Rails应用程序做一些前端工作,我不会弄乱后端架构。基本上,我应该允许用户上传文件并使该提交基本上通过CarrierWave处理的表单直接进入亚马逊。如果你曾试图用ajax做同样的事情,你就会知道这几乎是不可能的。
这让我在这里:我需要能够在html表单元素上调用.submit()
,然后挂钩上传进程,就好像我正在侦听XMLHttpRequest上的“progress”事件一样。 / p>
请原谅我没有显示大量代码。我真的只是在寻找两件非常简单的事情。
form.addEventListener('progress', function () {...})
那样简单吗? (顺便说一下,这不起作用。)答案 0 :(得分:2)
我认为您无法在标准表单提交上进行上传。
所以我没有对此进行测试,但为什么不通过AJAX提交表单?您可以使用FormData
对象上传文件,该对象可以处理上传的多部分请求。
这样的事可能有用:
// grab the form you want to submit.
var formElement = document.getElementById("myFormElement");
// make an xhr object
var request = new XMLHttpRequest();
// track progress
request.upload.addEventListener('progress', progressHandler, false);
// setup request method and url
request.open("POST", formElement.action);
// send the request
request.send(new FormData(formElement));
您必须侦听服务器响应并执行它告诉您的操作,重定向或处理故障或其他任何操作。但我认为它应该有效。您提交的服务器可能不关心它是xhr请求还是标准浏览器请求。
它应该适用于all modern browsers.
And here's a link to that details如何跟踪ajax上传的进度。