javascript - 如何将文件附加到 FormData()?

标签 javascript xmlhttprequest multipartform-data filereader form-data

fd.append("upload", file) 产量,

------WebKitFormBoundaryJnjpATRkxe2Duwwu
Content-Disposition: form-data; name="userid"

8022171621665209152
------WebKitFormBoundaryJnjpATRkxe2Duwwu
Content-Disposition: form-data; name="upload"; filename="sample.csv"
Content-Type: text/csv


------WebKitFormBoundaryJnjpATRkxe2Duwwu--

fd.append("upload", evt.target.result) 产量,

------WebKitFormBoundaryITfVxS7FbNWfk3Ty
Content-Disposition: form-data; name="userid"

8022171621665209152
------WebKitFormBoundaryITfVxS7FbNWfk3Ty
Content-Disposition: form-data; name="upload"

"Healthy1.jpg","1","3","1","5"
"Unhealthy1.jpg","0","2","1","2"
"Water1.jpg","2","2","1","3"
------WebKitFormBoundaryITfVxS7FbNWfk3Ty--

但我需要这个,

------WebKitFormBoundaryITfVxS7FbNWfk3Ty
Content-Disposition: form-data; name="userid"

8022171621665209152
------WebKitFormBoundaryITfVxS7FbNWfk3Ty
Content-Disposition: form-data; name="upload"; filename="sample.csv"
Content-Type: text/csv

"Healthy1.jpg","1","3","1","5"
"Unhealthy1.jpg","0","2","1","2"
"Water1.jpg","2","2","1","3"
------WebKitFormBoundaryITfVxS7FbNWfk3Ty--

这是我的代码:

app.ports.uploadFile.subscribe(function(userid){
    var file = document.getElementById("csv").files[0];
    var fr = new FileReader();
    fr.readAsText(file, "UTF-8");
    fr.onload = function (evt) {
        console.log(evt.target.result);
        var fd = new FormData();
        fd.append("userid", userid)
        fd.append("upload", file) // <<<<< WHAT DO I PUT HERE?
        var xhr = new XMLHttpRequest()
        xhr.open('post', "http://localhost:8668/upload/ugimgset", true)
        xhr.setRequestHeader("Content-Type", "multipart/form-data")
        xhr.setRequestHeader("Authorization", "Bearer " + token() )
        xhr.send(fd)
    }
})

最佳答案

我找到了错误的根源

  1. 我只需要 FormData() - 它负责处理文件和隐藏字段。
  2. 我正在覆盖Content-Type。当我这样做时,表单边界丢失了:

`xhr.setRequestHeader("Content-Type", "multipart/form-data")

更正后的代码如下(以及一些上下文):

app.ports.uploadFile.subscribe(function(pathAndId){
    var [tasksrvPath, formId] = pathAndId
    try {
        var fd = new FormData(document.getElementById(formId));
        var r = new XMLHttpRequest()
        r.open("POST", tasksrvPath, true)
        r.setRequestHeader("Authorization", "Bearer " + token() )
        r.send(fd)
        r.onload = function() {
            app.ports.status.send(r.statusText)
        }
    } catch(e) {
        console.log(e.message);
    }
})

关于javascript - 如何将文件附加到 FormData()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43245657/

相关文章:

javascript - 动态添加元素属性

jsp - 如何在jsp和servlet中显示文件上传进度条并实现多部分过滤器?

javascript - navbar-fixed-top - 页面闪烁,我被迫置顶

JavaScript 舍入到下一个 0.1

php - 如何防止 XMLHttpRequest 在没有 jQuery 的情况下缓存请求?

javascript - 为什么 XMLHttpRequest 响应的长度与请求文件的大小不同?

azure - 如何在 Azure 逻辑应用程序的 multipart/form-data 中添加多个部分

java - MULTIPART_FORM_DATA : No injection source found for a parameter of type Response

javascript - Chart.js Canvas 和图表宽度在重绘时被覆盖

javascript - 使用 XMLHTTPRequest 从 JavaScript 工作线程进行轮询