Javascript 让他们相信 提交文件
这是您使用 您可以更改代码以实现所需的外观和功能 总之,以下代码的作用是:Javascript 让他们相信 提交文件,javascript,html,filelist,Javascript,Html,Filelist,这是您使用 您可以更改代码以实现所需的外观和功能 总之,以下代码的作用是: 创建新的FormData实例 从文件输入接受文件 将文件追加到在步骤1中创建的FormData的名为file-${index}字段中 为每个文件创建FileReader实例 FileReader读取文件内容并返回以base64编码字符串表示文件数据的结果 创建span元素,并将步骤5的文件内容作为src附加到img元素 将click侦听器附加到span上,因此当用户单击图像时,相应的文件将从步骤1的FormData中删除
FormData
实例FormData
的名为file-${index}
字段中文件创建FileReader
实例
FileReader
读取文件内容并返回以base64编码字符串表示文件数据的结果span
元素,并将步骤5的文件内容作为src
附加到img
元素click
侦听器附加到span
上,因此当用户单击图像时,相应的文件将从步骤1的FormData
中删除,而span
将从DOM
中删除FormData
将作为请求主体发送到后端,用户单击submit files
按钮时使用sendFiles
功能作为单击处理程序FormData
的文件列表及其相应的表单字段名和原始文件名,该列表是使用listFiles
函数生成的ul
const formData=new formData();
//用于FormData的文件字段名
设指数=0;
//用于列出当前文件
常量列表文件=()=>{
const list=document.createElement(“ul”);
Array.from(formData.entries()).forEach((entry)=>{
const item=document.createElement(“li”);
item.innerHTML=条目[0]+“:“+条目[1]。名称;
列表。追加子项(项目);
});
document.querySelector(“#fileList”).innerHTML=list.innerHTML;
};
//用于将文件发送到后端
常量sendFiles=()=>{
获取(“/upload/path”{
正文:formData,
方法:“张贴”,
})
.then((response)=>response.json())//如果响应是json格式的
。然后((数据)=>{
控制台日志(数据);
})
.catch((错误)=>{
控制台错误(error);
});
};
//用于输出fileReader输出和FormData的文件
//它需要是异步的,因为fileReader onload事件具有异步性质,所以我们可以使用索引保持FormData和fileReader的同步
常量读取文件=(文件)=>{
返回新承诺((解决、拒绝)=>{
const fileReader=new fileReader();
fileReader.onload=(事件)=>{
const theFile=event.target;
返回解析([file,theFile]);
};
fileReader.readAsDataURL(文件);
});
};
const handleFileSelect=async(事件)=>{
var files=event.target.files;
for(文件的常量文件){
if(file.type.match(“image.*)){
const[fileData,theFile]=等待读取文件(file);
const id=`file-${index}`;
formData.append(id,fileData);
const span=document.createElement(“span”);
const img=document.createElement(“img”);
img.src=file.result;
img.alt=“图像拇指”;
img.title=escape(fileData.name);
img.className=“拇指”;
span.附加儿童(img);
//用于从FormData中删除缩略图及其链接文件
span.addEventListener(“单击”,()=>{
formData.delete(id);
//列出删除此缩略图后附加到FormData的当前文件
listFiles();
span.remove();
});
索引++;
document.getElementById(“list”).insertBefore(span,null);
}
}
//添加新文件后列出文件
listFiles();
};
document.getElementById(“文件”).addEventListener(“更改”,handleFileSelect,false)代码>
.thumb{
高度:75px;
边框:1px实心#000;
利润率:10px 5px 0;
}
单击图像以删除它们
提交文件
听起来好像你在说如果你console.log(files.length)
,它将始终输出1
?我无法复制。如果我选择多个文件,则文件。length
是我选择的文件数。FileList并不总是1。我上传了3个项目,它显示了3个。我上传了一张我如何在console中查看文件列表的图片。听起来你好像在说如果你console.log(files.length)
,它将始终输出1
?我无法复制。如果我选择多个文件,则文件。length
是我选择的文件数。FileList并不总是1。我上传了3个项目,它显示了3个。我上传了一张图片,我是如何在Consolence中看到文件列表的!它起作用了。是否有机会通过单独选择文件来获取文件列表?Thanks@sonEtLumiere您总是会得到一个文件列表,即使它包含一个文件。有很多方法可以将文件附加到输入.files
,但是数组不足以满足您的情况吗?那么数组和FormData就是一种方法。很好!它起作用了。是否有机会通过单独选择文件来获取文件列表?Thanks@sonEtLumiere您总是会得到一个文件列表,即使它包含一个文件。有很多方法可以将文件附加到输入.files
,但是数组不足以满足您的情况吗?那么数组和FormData就是一种方法。