node.js文件上传重命名以及移动位置的示例代码

下面我会给出一个使用Node.js实现文件上传、重命名以及移动位置的示例代码,并讲解具体步骤。

环境准备

在开始之前,我们需要确保计算机上已经安装了Node.js。同时需要安装以下两个Node.js模块:

  • formidable:用于处理文件上传;
  • fs:用于处理文件操作。

可以通过以下命令进行安装:

npm install formidable fs

文件上传

下面来看具体的代码。首先我们需要创建一个Node.js脚本文件,例如 upload.js,并导入 formidablehttp 模块:

const http = require('http');
const formidable = require('formidable');

然后,我们创建一个服务器,并监听一个POST请求,处理文件上传:

http.createServer((req, res) => {  
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = formidable({ multiples: true });

    form.parse(req, (err, fields, files) => {
      if (err) {
        console.error(err);
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Error occurred while uploading file.');
        return;
      }

      // 文件上传成功
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.end('File uploaded successfully.');
    });
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Invalid request');
  }
})

在上述代码中,我们使用了 formidable 模块的 form.parse() 方法解析请求。该方法将会把上传的文件信息解析后储存在 files 参数中。

文件重命名以及移动

文件上传成功后,我们可以在上传文件时进行文件重命名,并移动文件到特定位置。我们可以使用 fs 模块的 fs.rename() 方法来完成这一操作。

下面是完整的代码:

const http = require('http');
const formidable = require('formidable');
const fs = require('fs');

http.createServer((req, res) => {  
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = formidable({ multiples: true });

    form.parse(req, (err, fields, files) => {
      if (err) {
        console.error(err);
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Error occurred while uploading file.');
        return;
      }

      const uploadedFile = files.uploadFile;

      // 重命名文件
      const fileNewName = Date.now() + '_' + uploadedFile.name;
      const fileNewPath = __dirname + '/uploads/' + fileNewName;
      fs.rename(uploadedFile.path, fileNewPath, (err) => {
        if (err) {
          console.error(err);
          res.writeHead(500, { 'Content-Type': 'text/plain' });
          res.end('Error occurred while renaming file.');
          return;
        }

        console.log(`File ${uploadedFile.name} uploaded and renamed to ${fileNewName}`);
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('File uploaded successfully and renamed.');
      });
    });
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Invalid request');
  }
}).listen(3000, () => {
  console.log('Server started on port 3000');
});

在上述代码中,我们先使用 uploadedFile.name 应用了一个新文件名。然后我们使用 __dirname 获取当前脚本所在目录,并使用 /uploads/ 拼接出新的文件路径,最后使用 fs.rename() 方法完成文件的重命名和移动。

示例说明

下面是两个示例,演示如何从本地上传文件,并在文件上传时对文件进行重命名、移动,并将上传成功的信息显示在网页上。

示例1

在示例1中,我们将在上传成功后把文件重命名为上传用户名+时间,并存储在 ./uploads/ 文件夹中。

在文件上传后,在浏览器中输入 http://localhost:3000 即可打开页面进行文件上传。

const http = require('http');
const formidable = require('formidable');
const fs = require('fs');

http.createServer((req, res) => {  
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = formidable({ multiples: true });

    form.parse(req, (err, fields, files) => {
      if (err) {
        console.error(err);
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Error occurred while uploading file.');
        return;
      }

      const uploadedFile = files.uploadFile;

      // 获取上传用户名和文件后缀
      const username = fields.username;
      const fileExt = uploadedFile.name.split('.').pop();

      // 重命名文件
      const fileNewName = username + '_' + Date.now() + '.' + fileExt;
      const fileNewPath = __dirname + '/uploads/' + fileNewName;
      fs.rename(uploadedFile.path, fileNewPath, (err) => {
        if (err) {
          console.error(err);
          res.writeHead(500, { 'Content-Type': 'text/plain' });
          res.end('Error occurred while renaming file.');
          return;
        }

        console.log(`File ${uploadedFile.name} uploaded and renamed to ${fileNewName}`);
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('File uploaded successfully and renamed.');
      });
    });
  } else {
    const html = `
      <html>
        <head>
          <meta charset="utf-8">
          <title>文件上传</title>
        </head>
        <body>
          <h3>文件上传</h3>
          <form action="/upload" method="post" enctype="multipart/form-data">
            <input type="text" name="username" placeholder="请输入用户名"><br>
            <input type="file" name="uploadFile" multiple="multiple"><br>
            <input type="submit" value="提交">
          </form>
        </body>
      </html>
    `;
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end(html);
  }
}).listen(3000, () => {
  console.log('Server started on port 3000');
});

示例2

在示例2中,我们将在上传成功后把文件重命名为时间戳,并存储在 ./uploads/ 文件夹中。上传成功后,将会在页面上显示上传成功信息和上传文件预览链接。

在文件上传后,在浏览器中输入 http://localhost:3000 即可打开页面进行文件上传。

const http = require('http');
const formidable = require('formidable');
const fs = require('fs');

http.createServer((req, res) => {  
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = formidable({ multiples: true });

    form.parse(req, (err, fields, files) => {
      if (err) {
        console.error(err);
        res.writeHead(500, { 'Content-Type': 'text/plain' });
        res.end('Error occurred while uploading file.');
        return;
      }

      const uploadedFile = files.uploadFile;

      // 重命名文件
      const fileNewName = Date.now() + '_' + uploadedFile.name;
      const fileNewPath = __dirname + '/uploads/' + fileNewName;
      fs.rename(uploadedFile.path, fileNewPath, (err) => {
        if (err) {
          console.error(err);
          res.writeHead(500, { 'Content-Type': 'text/plain' });
          res.end('Error occurred while renaming file.');
          return;
        }

        console.log(`File ${uploadedFile.name} uploaded and renamed to ${fileNewName}`);
        const html = `
          <html>
            <head>
              <meta charset="utf-8">
              <title>文件上传结果</title>
            </head>
            <body>
              <h3>文件上传成功</h3>
              <div>
                <p>文件名:<a href="./uploads/${fileNewName}" target="_blank">${fileNewName}</a></p>
                <p>文件大小:${uploadedFile.size}</p>
                <p>文件类型:${uploadedFile.type}</p>
                <p>预览链接:<a href="./uploads/${fileNewName}" target="_blank">${uploadedFile.name}</a></p>
              </div>
            </body>
          </html>
        `;
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(html);
      });
    });
  } else {
    const html = `
      <html>
        <head>
          <meta charset="utf-8">
          <title>文件上传</title>
        </head>
        <body>
          <h3>文件上传</h3>
          <form action="/upload" method="post" enctype="multipart/form-data">
            <input type="file" name="uploadFile" multiple="multiple"><br>
            <input type="submit" value="提交">
          </form>
        </body>
      </html>
    `;
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end(html);
  }
}).listen(3000, () => {
  console.log('Server started on port 3000');
});

以上就是使用Node.js实现文件上传、重命名以及移动位置的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js文件上传重命名以及移动位置的示例代码 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js中ws模块创建服务端与客户端实例代码

    下面是关于“node.js中ws模块创建服务端与客户端实例代码”的完整攻略。 1. 安装ws模块 在开始使用ws模块之前,需要安装ws模块,可以使用npm进行安装。 npm install ws –save 2. 创建WebSocket服务端 首先需要引入ws模块,然后创建一个WebSocketServer对象,监听指定的端口。 示例代码: const W…

    node js 2023年6月8日
    00
  • node.js实现回调的方法示例

    下面我将详细讲解“node.js实现回调的方法示例”的完整攻略,包含以下内容: 什么是回调函数 Node.js中实现回调的两种方式 示例一:使用普通回调函数实现异步流程控制 示例二:使用Promise对象实现异步流程控制 1. 什么是回调函数 回调函数是指将一个函数作为参数传递给另一个函数,并且这个参数函数将在另一个函数完成后被调用执行的过程。回调函数是实现…

    node js 2023年6月8日
    00
  • 利用nodeJS+vue图片上传实现更新头像的过程

    下面是详细讲解“利用nodeJS+vue图片上传实现更新头像的过程”的完整攻略。 1. 服务器端实现 服务器端代码主要通过nodeJS来实现,具体步骤如下: 使用 multer 中间件处理图片上传,具体操作可以参考官方文档。 在上传图片的接口中,获取图片的base64编码,将其保存为文件。 “`javascript const fs = require(‘…

    node js 2023年6月8日
    00
  • Ajax中post方法直接返回以0开头数字出错问题分析

    当我们使用Ajax中的post方法发起请求时,有时可能会出现返回值以0开头数字出错的情况。这个问题的原因是在Ajax里面,返回以0开头的数字会被解析成八进制数,而不是十进制数,因此造成了解析错误。 解决这个问题的方法很简单,一种方法是将返回值转换成字符串类型,另一种方法是在服务器端设置返回头,让其返回值以JSON格式输出。 下面,我将分别演示这两种解决方法:…

    node js 2023年6月8日
    00
  • NodeJS学习笔记之FS文件模块

    下面是关于“NodeJS学习笔记之FS文件模块”的完整攻略: 什么是FS模块? Node.js中的FS模块是用于处理文件系统的核心模块之一。它允许您读取、更新和删除文件,以及创建和读取文件夹。 如何使用FS模块? 在使用FS模块之前,必须先引入该模块。可以使用以下代码实现: const fs = require(‘fs’); 读取文件 你可以使用fs.rea…

    node js 2023年6月8日
    00
  • PHP+JS实现大文件切片上传功能实现实例源码

    下面来详细讲解 “PHP+JS实现大文件切片上传功能实现实例源码”的完整攻略。 简介 本文讲解了如何采用 PHP 和 JS 实现大文件切片上传功能,将大文件切割为多个小文件进行上传,避免了一次性上传文件过大导致的造成服务器瘫痪的问题。 实现步骤 1.划分切片 使用 JS 将大文件划分为多个小文件进行上传。 示例代码: //创建FormData对象,进行文件上…

    node js 2023年6月8日
    00
  • 详解nodeJs文件系统(fs)与流(stream)

    下面是对Node.js文件系统(fs)和流(stream)的详解攻略。 fs模块的介绍 Node.js的fs模块提供了一组丰富的API用于文件系统操作,包括文件的读取、写入、修改、删除等。该模块使用同步或异步的方式访问文件系统,可以操作各种类型的文件,包括文本、图片、视频、音频等。 fs的常见API 以下是一些最常用的fs API: 读取文件: fs.rea…

    node js 2023年6月8日
    00
  • node.js中的buffer.Buffer.isBuffer方法使用说明

    下面来详细讲解“node.js中的buffer.Buffer.isBuffer方法使用说明”的完整攻略。 什么是Buffer Buffer是Node.js中的一个全局构造函数,它提供了对二进制数据的操作。Buffer的实例类似于整数数组,但Buffer的大小是固定的,它无法对其大小进行更改。 Buffer.isBuffer方法 Buffer.isBuffer…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部