获取文件输入值以使用javascript模拟表单post

获取文件输入值以使用javascript模拟表单post,javascript,ajax,amazon-s3,Javascript,Ajax,Amazon S3,我有一个javascript函数,它使用简单的httppost提交一个表单post,将一个图像上传到s3,表单与submit一起工作很好,但是我想使用ajax,我发现文件输入没有提交,因为我使用的是value字段。我正试图用文件[0]获取它,但它是空的 httppost是否提交了整个文件,我是否需要读取文件的内容,或者只是使用ajax作为文件字段的值发布url?!这似乎不起作用 我更喜欢ajax,因为当我使用普通提交时,它会刷新整个页面并重定向用户。我想将文件发送到s3,并使用ajax拦截来自s

我有一个javascript函数,它使用简单的httppost提交一个表单post,将一个图像上传到s3,表单与submit一起工作很好,但是我想使用ajax,我发现文件输入没有提交,因为我使用的是value字段。我正试图用文件[0]获取它,但它是空的

httppost是否提交了整个文件,我是否需要读取文件的内容,或者只是使用ajax作为文件字段的值发布url?!这似乎不起作用

我更喜欢ajax,因为当我使用普通提交时,它会刷新整个页面并重定向用户。我想将文件发送到s3,并使用ajax拦截来自s3的xml响应,而无需刷新浏览器


在执行提交操作之前,似乎不会加载文件内容,因此在表单提交之前,文件内容不可用,如何从javascript触发此操作?我没有使用jquery,所以我正在考虑如何将文件内容作为一个post变量从javascript发布。

您可以通过在
body
at
fetch()
调用中设置
实例直接发布
文件
Blob
对象,或者将
文件
对象附加到
表单数据
对象,并将
POST
多部分/表单数据
附加到服务器

document.querySelector("input[type=file]")
.onchange = e => {
  if (e.target.files.length)
    fetch("/path/to/server", {
      method:"POST",
      body:e.target.files[0]
    })
    .then(response => console.log(response.ok))
    .catch(err => console.error(err))
  }
}

我设法用formdata做到了这一点,它似乎有更好的浏览器支持。谢谢