5条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
前端文件夹上传:
- 创建HTML文件(如
index.html)并添加一个input元素用于接受文件输入:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>File Upload</title> </head> <body> <label for="file-input">Select files:</label> <input type="file" id="file-input" accept=".jpg, .png, .pdf" multiple> <button onclick="uploadFiles()">Upload Files</button> <script src="script.js"></script> </body> </html>- 编写JavaScript文件(如
script.js)来实现文件上传功能:
const input = document.getElementById('file-input'); const fileInput = new FormData(input); function uploadFiles() { const files = fileInput.files; if (files.length === 0) return; // 使用async/await处理异步请求 Promise.all(files.map(file => fetch('/upload', { method: 'POST', body: file, headers: { 'Content-Type': 'multipart/form-data' } })).then(responses => { // 处理每个上传响应 responses.forEach(response => response.json()); console.log('Uploads successful!'); }).catch(error => { console.error('Error uploading files:', error); }); } // 在需要的地方导入fetch模块 import fetch from 'fetch'; // 导入文件浏览器API import '/FileSaver.js';- 在
/upload路由处处理文件上传请求:
app.post('/upload', async (req, res) => { try { // 解析上传的文件流并存储到本地磁盘 const file = await FileSaver.arrayToBlob(req.body.files); fs.writeFile('/path/to/uploaded/file.jpg', file, (err) => { if (err) throw err; console.log('File uploaded successfully.'); }); res.status(200).json({ message: 'File uploaded successfully' }); } catch (error) { console.error('Error uploading file:', error); res.status(500).send('An error occurred while uploading the file.'); } });后端文件处理逻辑:
-
首先,确保你的服务器已经配置好相应的文件上传接口,例如在Node.js环境中可以使用Express框架进行处理。以下是基础示例:
const express = require('express'); const app = express(); // 指定文件上传的URL路径和返回路径 app.post('/upload', async (req, res) => { try { const files = req.files; const chunks = []; let index = 0; for (const file of files) { const chunkSize = Math.min(10 * 1024 * 1024, file.size); chunks.push(chunkSize); index += chunkSize; if (index >= chunks.length) break; // 文件已全部上传 const reader = new FileReader(); reader.onload = () => { chunks[index] = reader.result; index++; }; reader.readAsArrayBuffer(file); } const result = chunks.reduce((acc, chunk) => acc.concat(chunk), []); // 存储上传的数据到数据库或本地存储 const data = JSON.stringify(result); const options = { filename: 'uploads/' + Date.now(), type: 'image/jpeg' }; // 提交文件数据 const response = await fetch('/store/upload', options); const contentType = response.headers['content-type']; if (!contentType.startsWith('application/json')) { console.error('Invalid content type received'); res.status(400).send('Invalid content type received.'); } else { const file = await response.blob(); res.status(200).json({ file }); } } catch (error) { console.error('Error processing file upload:', error); res.status(500).send('An error occurred while uploading the file.'); } }); app.listen(3000, () => { console.log('Server started on port 3000'); });这里我们假设有一个名为
store的服务端应用,并有一个路由/store/upload接受文件上传请求。我们将读取上传的文件部分,并将其存储为JSON字符串。对于文件类型为图片的上传,我们使用了Node.js的FileReader API 和
Blob对象来实现。对于其他文件类型,我们可以将上传的整个文件转换为Blob对象,并根据需要进一步处理。下面是一个简单的例子,展示如何在服务端发送一个JSON字符串到客户端:
const app = express(); app.post('/store/upload', async (req, res) => { try { const files = req.files; const chunks = []; let index = 0; for (const file of files) { const chunkSize = Math.min(10 * 1024 * 1024, file.size); chunks.push(chunkSize); index += chunkSize; if (index >= chunks.length) break; // 文件已全部上传 const reader = new FileReader(); reader.onload = () => { chunks[index] = reader.result; index++; }; reader.readAsArrayBuffer(file); } const result = chunks.reduce((acc, chunk) => acc.concat(chunk), []); const formData = new FormData(); formData.append('file', result[0]); const response = await fetch('/store/store', { method: 'POST', body: formData, headers: { 'Content-Type': 'multipart/form-data' } }); const contentType = response.headers['content-type']; if (!contentType.startsWith('application/json')) { console.error('Invalid content type received'); res.status(400).send('Invalid content type received.'); } else { const file = await response.blob(); res.status(200).json({ file }); } } catch (error) { console.error('Error processing file upload:', error); res.status(500).send('An error occurred while uploading the file.'); } }); app.listen(3000, () => { console.log('Server started on port 3000'); });注意:这段代码只是一个基本示例,实际的业务场景可能涉及更复杂的错误处理、安全性检查等,比如防止恶意上传,验证上传的文件格式,以及在服务器端对文件进行正确的保存等。在生产环境,你可能还需要考虑并发控制、连接池管理等问题。
解决 无用评论 打赏 举报 编辑记录- 创建HTML文件(如