<input id="uploadFile" type="file" accept="image/*" webkitdirectory /> <button id="submit" onclick="uploadFile()">上传文件</button> <script> const uploadFileEle = document.querySelector("#uploadFile"); const request = axios.create({ baseURL: "http://localhost:3000/upload", timeout: 60000, }); async function uploadFile() { if (!uploadFileEle.files.length) return; const files = Array.from(uploadFileEle.files); upload({ url: "/multiple", files, }); } function upload({ url, files, fieldName = "file" }) { let formData = new FormData(); files.forEach((file, i) => { // formData.append(fieldName, files[i], files[i].name); // 对webkitRelativePath路径进行处理,确保@koa/multer能正确接收路径 formData.append( fieldName, files[i], files[i].webkitRelativePath.replace(/\//g, "@") ); }); request.post(url, formData);
时间: 2024-02-14 21:18:37 浏览: 65
实现的upload文件上传
这段代码主要实现了上传文件的功能。具体解释如下:
第一行代码使用 HTML 的 input 元素创建了一个文件上传组件,用户可以选择文件上传,同时使用 accept 属性限制上传文件类型为图像文件。
第二行代码创建了一个上传文件的按钮,当用户点击该按钮时会调用 uploadFile 函数进行文件上传。
第三行代码定义了一个 JavaScript 脚本,该脚本使用了 axios 库创建了一个 HTTP 请求实例,用于向服务器发送文件上传请求。
第五行代码定义了一个异步函数 uploadFile,该函数首先判断用户是否选择了上传文件,如果没有选择则直接返回,否则获取用户选择的文件列表,然后调用 upload 函数进行文件上传。
第十行代码定义了一个 upload 函数,该函数接收三个参数:url 表示上传文件的 URL,files 表示要上传的文件列表,fieldName 表示上传文件的字段名,默认为 "file"。
第十三行代码创建了一个 FormData 对象,用于将要上传的文件数据以表单形式提交到服务器。
第十四行代码使用 forEach 循环遍历文件列表,将每个文件添加到 formData 对象中。同时,对于每个文件,将其对应的 webkitRelativePath 属性中的所有斜杠替换为 @ 符号,以确保服务器能够正确地接收文件路径。最后,调用 axios 库的 post 方法将文件数据上传到指定的 URL。
阅读全文