如何使用javascript File对象模拟表单提交?

时间:2011-06-03 14:48:33

标签: javascript html django html5

所以我有一个文件对象,通过从桌面拖放到一个区域来创建。现在事情都很花哨,直到我必须通过Ajax将它上传到Django后端。我想利用漂亮的Django工具,例如request.FILES等。

现在,我在这里搞乱了一些现有的代码:

xhr.open("post", s.post, true);

            // Set appropriate headers
            xhr.setRequestHeader("content-type", "multipart/form-data");
            xhr.setRequestHeader("x-file-name", file.fileName);
            xhr.setRequestHeader("x-file-size", file.fileSize);
            xhr.setRequestHeader("x-file-type", file.
            xhr.send(file);

尽可能尝试,它似乎不会模拟带有文件输入提交的表单。有什么东西我不见了吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要创建一个“FormData”对象,然后将该文件作为参数附加到该对象。

    var fd = new FormData();
    fd.append("theFile", yourFileObject);
    //
    // ... set up the xhr ...
    //
    xhr.send(fd);

显然这只适用于HTML5环境,但是如果你搞乱了可能正在处理的文件内容。

答案 1 :(得分:0)

不幸的是,您无法使用XmlHttpRequest对象上传文件,因为它不受支持。

有一些hacky变通方法(比如使用iFrame),最近有一个新的File api(https://developer.mozilla.org/en/using_files_from_web_applications)用于支持HTML 5的浏览器。

如果您在stackoverflow上搜索更多内容,可以找到有关如何进行解决方法的示例。