21xrx.com
2024-12-22 20:25:31 Sunday
登录
文章检索 我的文章 写文章
NodeJS 实现前端上传图片保存功能
2023-07-10 11:58:34 深夜i     --     --
NodeJS 前端 上传 图片 保存功能

随着移动互联网的发展,上传图片已成为前端开发中常见的功能之一。为了提高网站的用户体验,前端上传图片须具备以下特点:快速、安全、易用并且支持大文件上传。Node.js不仅作为一款服务器端编程语言,还有丰富的第三方模块和库,可以非常方便地实现前端上传图片保存功能。

Node.js使用formidable模块来实现图片上传。formidable是一个用于解析form数据的Node.js模块,可以返回服务器上文件的信息,如文件名、大小和类型。首先,我们需要使用npm安装formidable:npm install formidable。

接着,我们可以使用以下代码实现前端上传图片:


const http = require('http');

const formidable = require('formidable');

const fs = require('fs');

http.createServer(function(req, res) {

 if (req.url == '/upload' && req.method.toLowerCase() == 'post') {

  // 创建formidable实例

  const form = new formidable.IncomingForm();

  // 指定文件上传路径

  form.uploadDir = './upload/';

  // 保存文件的后缀名

  form.keepExtensions = true;

  // 处理form数据

  form.parse(req, function(err, fields, files) {

   res.writeHead(200, {'content-type': 'text/plain'});

   res.write('upload received\n');

   res.end();

  });

  // 监听文件上传完成事件

  form.on('end', function(fields, files) {

   console.log('upload completed');

   // 获取文件名

   const fileName = files.file.path.slice(8);

   // 重命名文件

   fs.rename(files.file.path, `./upload/${fileName}`, () => {});

  });

 } else {

  res.writeHead(200, {'Content-Type': 'text/html'});

  res.end(`

   <form action="/upload" enctype="multipart/form-data" method="post">

    <input type="file" name="file" multiple><br><br>

    <input type="submit" value="上传">

   </form>

  `);

 }

}).listen(3000, () => {

 console.log('Server is running at http://localhost:3000');

});

以上代码中,我们创建了一个HTTP服务器,指定了formidable上传文件的路径和保存的后缀名,然后使用form.parse()方法处理form数据,监听文件上传完成事件,最后将上传的文件进行重命名,保存在指定的上传路径下。

在页面中,我们使用HTML的表单标签,enctype属性为multipart/form-data,method属性为post,然后将form的action属性指向我们实现图片上传的代码所在的URL。用户提交form表单后,数据会被发送到指定的URL地址,Node.js服务器会解析数据,处理上传的图片。当上传完成后,服务器将返回上传成功信息,并将上传的图片保存在指定的上传路径下。

总之,NodeJS提供了方便的模块和库,使得实现前端上传图片功能变得非常简单。我们只需要使用formidable模块解析form数据即可。随着前端技术的不断发展,前端上传文件功能也将更加成熟和普及,这对于提高用户体验和丰富网站交互功能具有重要的意义。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复