文件应该如何上传

想用koa2写接收客户端上传文件并存储的功能但是用ctx.body没有接收到post给服务器的文件
有几个地方不是很清楚 有知道其中任意问题的希望能来解惑,不胜感激,能解决任意问题必赞同,谢谢
1、 <input type="file" multiple onchange="fileinfo(this.files)" name="up"> 应该是可以选择多个文件,但是我还是只能选择一个,是不是我的写法问题?
2、在只有一个文件的情况下,这个文件是不是onchange事件的参数列表的第一个,也就是如下代码中的files[0]?但是我输出的只有文件信息,这个文件是blob格式的吗?

 function fileinfo (files) {
      console.log(files[0])
  }

3、文件上传服务器是否可以直接用XMLHttpRequest,还是应该responseType = blob,或者其他什么方式向服务器发送文件

var xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://localhost:3000');
    xhr.setRequestHeader('')
    xhr.send(a[0]) //这里的a就是onchange的参数

4、不知道是不是我之前流程写的不对,总之ctx.body没有拿到数据.我的input是在form内的,但并非通过form上传,是不是还需要什么中间件进行数据接收,才可以拿到客户端post的数据?

阅读 2.2k
3 个回答

可以用formData上传文件

ko2 不了解,

1、 <input type="file" multiple onchange="fileinfo(this.files)" name="up"> 应该是可以选择多个文件,但是我还是只能选择一个,是不是我的写法问题?

写法应该没问题,你可以一次选择多个,但是多次选择,应该只会保留最后一个(猜测);

2、选中文件通过 HTMLInputElement.files 属性返回 — 返回值是一个 FileList 对象,这个对象是一个包含了许多 File 文件的列表。File 对象是特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。比如说, FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。

3、4、没做过不知道;

应该是 input name=up[] 设置成数组 这样才可以接受多个文件,不然接受的总是最后一个文件?不知道是不是

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题