在 HTML/jQuery 中,如何使用输入 id 作为参数将 POST 文件分块发送到服务器?

How do you POST files in chunks, to server, using input id as param, in HTML/jQuery?

描述

我有一个函数,它采用 HTTP_POST 路径 用于服务器端硬编码 .js 处理程序和 来自输入的文件 ID[type=file]。我正在尝试 POST binary 文件到服务器,但没有成功。

你试过什么?

利用我的 uncle 智慧,我注意到有一种方法可以使用 :

对文件进行切片
var File1 = document.querySelector('input').files[0].slice(0,7);

但是将此变量传递给函数不是一个选项,因为它需要 id ="file_1" 作为来自 <input type="file">[= 的参数44=]。此外,打印此变量不适用于 console.log (你们中的一半人已经在考虑将我送回 uni) 提示:我从未研究过 Javascript.于是我用力戳了一下叔叔,发现it。 FileReader 使您能够真正阅读内部内容,这给了我希望,因为我的文件被打印到 console.log

var reader = new FileReader;
reader.readAsBinaryString(File1);
reader.onload = function(e) {
    var rawLog = reader.result;
    console.log(rawLog);
};

此时 console.log 打印了我文件的前七个字节。通过所有这些,我们得到了我想问的问题

问题 ?¿

如何像 input 一样将此打印件传递给函数以便我可以将此文件切片并保存?

您可以分割文件的一部分,使用该部分创建一个 File 对象,将其添加到 FileList,然后用包含新文件的输入覆盖 FileList

var input = document.querySelector('input');
var originalfile = input.files[0];
var slice = originalfile.slice(0,7); // slice the file
var newfile = new File([slice] , 'slicedfile.dat'); // create new file
// Need to use a data transfer object to get a new FileList object
var datTran = new ClipboardEvent('').clipboardData || new DataTransfer(); 
datTran.items.add(newfile);  // Add the file to the DT object
input.files = datTran.files; // overwrite the input file list with ours
// call function that takes path and id as parameters