欢迎访问宙启技术站
智能推送

H5读取文件并上传到服务器的方法

发布时间:2023-05-14 09:16:42

H5读取文件并上传到服务器的方法步骤如下:

Step1:创建一个表单input元素

<input type="file" id="fileInput" />

Step2:监听input元素的onchange事件

document.getElementById('fileInput').addEventListener('change', handleFileSelect, false);

Step3:定义事件处理函数handleFileSelect,利用FileReader对象读取文件内容并执行上传操作

function handleFileSelect(evt) {
  var file = evt.target.files[0];
  var reader = new FileReader();
  reader.onload = function(e) {
    var content = e.target.result;
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/upload', true);
    xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
    xhr.send(JSON.stringify({filename: file.name, content: content}));
  }
  reader.readAsDataURL(file);
}

说明:

1.通过evt.target.files[0]获取input元素的文件对象;

2.利用FileReader对象的readAsDataURL方法读取文件内容,获取base64编码后的字符串;

3.利用XMLHttpRequest对象执行POST请求,将文件名和内容以JSON格式上传到服务器。

Step4:在服务器端接收文件并保存

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const fs = require('fs');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.post('/upload', function(req, res) {
  const filename = req.body.filename;
  const content = req.body.content;
  const destPath = __dirname + '/uploads/' + filename;
  const base64Data = content.replace(/^data:image\/\w+;base64,/, "");
  const buffer = Buffer.from(base64Data, 'base64');
  fs.writeFile(destPath, buffer, function(err) {
      if (err) {
        console.log(err);
        res.status(500).send('File upload failed');
      } else {
        console.log('File saved successfully');
        res.status(200).send('File saved successfully');
      }
  });
});

app.listen(3000, function () {
  console.log('Server listening on port 3000');
});

说明:

1.使用body-parser中间件解析请求体;

2.在路由'/upload'中获取请求体的filename和content字段;

3.计算文件保存路径,将base64编码后的字符串转成Buffer对象,执行fs.writeFile方法保存文件;

4.在文件保存成功或失败时,分别向客户端返回相应的响应信息。

综上所述,以上就是H5读取文件并上传到服务器的方法,希望能对大家有所帮助。