当前位置: 首页 > 知识库问答 >
问题:

如何将文件追加到FormData()中?

杜海
2023-03-14

< code>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("上传",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个答案

连德水
2023-03-14

我找到了错误的来源

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

`x小时。setRequestHeader(“内容类型”,“多部分/表单数据”)

更正后的代码如下(连同一些上下文):

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);
    }
})
 类似资料:
  • 问题内容: 我一直在尝试重新实现HTML5图像上传程序,例如MozillaHacks网站上的HTML5图像上传程序,但是它可以与WebKit浏览器一起使用。任务的一部分是从对象中提取图像文件,并将其附加到FormData对象以进行上传。 问题在于,虽然具有返回图像文件表示形式的功能,但FormData对象仅接受FileAPI中的 File或Blob对象。 Mozilla解决方案在Firefox上使

  • 我一直在尝试重新实现一个HTML5图像上传程序,就像Mozilla Hacks网站上的一样,但它适用于WebKit浏览器。部分任务是从对象中提取图像文件,并将其附加到FormData对象以供上传。 问题是,虽然具有函数来返回图像文件的表示形式,但FormData对象仅接受来自文件API的文件或Blob对象。 Mozilla解决方案在画布上使用了以下仅限Firefox的函数: ...这在WebKit

  • 问题内容: 如何在注入Jenkins时将文本追加到文件中 我希望看到 25在哪里 这是我的尝试 错误: 版本:= 1.0。$ {env.BUILD_ID}:替换错误 注意文件在当前目录中 问题答案: 是一个groovy变量,而不是一个shell变量。由于您使用了单引号(),因此groovy 不会 替换字符串中的变量,并且Shell也不知道。您需要使用双引号并让groovy进行替换 或使用外壳程序知

  • 问题内容: 我一直在尝试重新实现HTML5图像上传程序,HTML5图像上传程序,但是它可以与WebKit浏览器一起使用。任务的一部分是从对象中提取图像文件,并将其附加到FormData对象以进行上传。 问题在于,虽然具有返回图像文件表示形式的功能,但FormData对象仅接受FileAPI中的 File或Blob对象。 Mozilla解决方案在Firefox上使用了以下仅Firefox功能: …在

  • 问题内容: 我发现os.Open()返回O_RDONLY文件,而os.Create()返回O_RDWR,但是找不到方法返回APPEND文件指针。 有什么帮助吗? 问题答案: 该OpenFile需要一个标志参数,您可以使用: 与O_CREATE一起使用,OpenFile还可以起到与os.Create()相同的作用。

  • 我正在向ASP中的控制器发送FormData对象。Net核心从一个角度应用。在这个FormData对象中,我想附加一个已上载到客户端的文件和一个项目id。