带有fetch或XMLHttpRequest的HTTP PUT文件/ BLOB

时间:2017-09-12 22:05:27

标签: javascript fetch-api

是否可以使用fetch上传文件?我不是在谈论FormData,但我希望将文件作为HTTP PUT的实际正文,以及Content-Type正确的ContentType?

如果fetch无法使用,XMLHttpRequest是否可以?此代码对我不起作用(事件是drop事件):

fetch('/foo', {
  method: 'PUT',
  body: event.dataTransfer.files[0],
});

修改

我特别谈论FILE上传。如果body是文字,则此 可以正常工作,但如果是FILE / BLOB,则

1 个答案:

答案 0 :(得分:1)

您可以只创建表单数据,例如:

const body = new FormData();
const file = event.dataTransfer.files[0];
body.append('files', file , file.name);

fetch('/foo', {
  method: 'PUT',
  body
});

但是,如果您只想直接发送数据,则必须更改标题并使用Blob

const body = new Blob(event.dataTransfer.files, { type: 'application/octet-stream' });

fetch('/foo', {
  method: 'PUT',
  headers: new Headers({ 'Content-Type': 'application/octet-stream' }),
  body
});