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日

相关文章

  • nodejs中的express-jwt的使用解读

    下面就来详细讲解“nodejs中的express-jwt的使用解读”的完整攻略。 什么是express-jwt express-jwt是一个基于jwt(jsonwebtoken)认证的中间件,用于验证客户端发来的请求是否合法。 安装express-jwt 在终端中运行以下命令来安装express-jwt: npm install express-jwt 使用…

    node js 2023年6月8日
    00
  • 浅谈Node新版本13.2.0正式支持ES Modules特性

    现在我来为您详细讲解“浅谈Node新版本13.2.0正式支持ES Modules特性”的完整攻略。 什么是ES Modules特性 ES Modules是JavaScript的模块化规范,它使得在网页开发中使用JavaScript进行模块化开发成为了可能。ES Modules的出现,主要是为了解决CommonJS和AMD等其他模块规范的一些缺陷,如全局变量的…

    node js 2023年6月8日
    00
  • node.js中的http.response.setHeader方法使用说明

    下面是关于node.js中http.response.setHeader方法的使用说明。 http.response.setHeader方法简介 在node.js中,http.response.setHeader是一个很常用的方法。该方法主要用来设置HTTP响应头的值。在向客户端发送HTTP响应之前,我们通常会通过该方法来设置HTTP响应的各种参数,如响应的…

    node js 2023年6月8日
    00
  • node.js插件nodeclipse安装图文教程

    下面我将详细讲解“node.js插件nodeclipse安装图文教程”的完整攻略,包括安装步骤、操作步骤和示例说明。 安装步骤 下载并安装Eclipse IDE for JavaScript Web Developers。可以在官网下载安装包,也可以使用Eclipse Marketplace进行安装。 在Eclipse中安装Node.js插件。打开Eclip…

    node js 2023年6月8日
    00
  • nodejs中安装ghost出错的原因及解决方法

    安装 Ghost 是搭建博客的必要步骤之一,但在安装过程中可能会遇到错误,这篇攻略将详细讲解在 Node.js 中安装 Ghost 出错的原因及解决方法。 问题描述 在使用命令 npm install -g ghost 安装 Ghost 时,可能会遇到以下错误: gyp ERR! build error gyp ERR! stack Error: `make…

    node js 2023年6月8日
    00
  • 解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题

    当我们使用Node.js连接MySQL数据库时,有可能会出现connect ECONNREFUSED 127.0.0.1:3306的错误。这种错误通常是由于MySQL服务未启动、端口被占用、权限问题等原因引起的。接下来我将详细介绍如何解决这个问题。 问题分析 当我们使用Node.js连接MySQL数据库时,通常使用第三方库,如mysql、mysql2等。这些…

    node js 2023年6月8日
    00
  • 解析NodeJs的调试方法

    下面是关于解析 Node.js 的调试方法的完整攻略。 入门 在开始调试之前,需要先清楚地了解 Node.js 的调试原理。简单地说,Node.js 的调试是通过在程序启动时指定 –inspect 参数来启用的。这将会使 Node.js 进程与 Chrome DevTools 建立起一个调试通道,通过这个通道可以实时地调试代码。 要调试 Node.js 应…

    node js 2023年6月7日
    00
  • Node.js实现下载文件的两种实用方式

    我来详细讲解“Node.js实现下载文件的两种实用方式”的完整攻略。 1. 使用Node.js自带的http、https模块进行文件下载 在Node.js中,我们可以使用原生的http、https模块来实现文件下载功能,具体步骤如下: 1.1 加载http、https模块 const http = require(‘http’); const https =…

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