Nodejs 简单文件上传下载项目

Nodejs 简单文件上传下载项目

实现了:

  1. 文件上传功能, 2. 文件下载功能。

下一步需解决:

  1. 上传不了大文件, 2. 界面优化。

欢迎到github帮忙完善,谢谢。

https://github.com/AdamsMao/nodejs-file-upload-download

3 回复

Nodejs 简单文件上传下载项目

在这个项目中,我们实现了一个简单的文件上传和下载功能。下面是项目的实现细节。

实现了:

  1. 文件上传功能
  2. 文件下载功能

下一步需解决:

  1. 上传不了大文件
  2. 界面优化

文件上传功能

为了实现文件上传功能,我们可以使用 multer 这个中间件来处理表单数据中的文件上传。以下是一个简单的示例代码:

首先,安装所需的依赖包:

npm install express multer

然后,在你的服务器端代码中配置 multer

const express = require('express');
const multer = require('multer');
const path = require('path');

const app = express();
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/') // 指定文件保存的目录
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + path.extname(file.originalname)) // 使用时间戳和文件扩展名作为文件名
  }
});

const upload = multer({ storage: storage });

app.post('/upload', upload.single('file'), (req, res) => {
  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

文件下载功能

接下来,我们实现文件下载功能。这里我们创建一个简单的路由来提供文件下载服务:

app.get('/download/:filename', (req, res) => {
  const filePath = path.join(__dirname, 'uploads', req.params.filename);
  res.download(filePath, (err) => {
    if (err) {
      res.status(404).send('File not found');
    }
  });
});

需要解决的问题

  1. 上传不了大文件: 目前的实现可能无法处理非常大的文件。你可以通过调整 Node.js 的最大请求体大小限制来解决这个问题。例如:

    app.use(express.urlencoded({ extended: true, limit: '50mb' }));
    app.use(express.json({ limit: '50mb' }));
    
  2. 界面优化: 为了使界面更友好,你可以添加一些 HTML 表单和样式。以下是一个简单的 HTML 表单示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>File Upload and Download</title>
      <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        form { margin-bottom: 20px; }
      </style>
    </head>
    <body>
      <h1>Upload a File</h1>
      <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="file" />
        <button type="submit">Upload</button>
      </form>
    
      <h1>Download a File</h1>
      <ul>
        <!-- 列出所有上传的文件 -->
        <% for (let file of files) { %>
          <li><a href="/download/<%= file %>"><%= file %></a></li>
        <% } %>
      </ul>
    </body>
    </html>
    

欢迎到 GitHub 帮忙完善这个项目,谢谢!


你这。。只是写个 demo 来玩的意思吗?

Nodejs 简单文件上传下载项目

实现了:

  1. 文件上传功能

    • 使用 multer 库处理文件上传。
    • 示例代码:
      const multer = require('multer');
      const path = require('path');
      
      const storage = multer.diskStorage({
        destination: function (req, file, cb) {
          cb(null, 'uploads/')
        },
        filename: function (req, file, cb) {
          cb(null, Date.now() + path.extname(file.originalname))
        }
      });
      
      const upload = multer({ storage: storage });
      
  2. 文件下载功能

    • 使用 Express 路由提供文件下载。
    • 示例代码:
      app.get('/download/:filename', (req, res) => {
        res.download(`uploads/${req.params.filename}`);
      });
      

下一步需解决:

  1. 上传不了大文件

    • 解决方法:增加 multer 的文件大小限制,并设置客户端的超时时间。
    • 示例代码:
      const upload = multer({
        storage: storage,
        limits: { fileSize: 50 * 1024 * 1024 } // 限制文件大小为50MB
      });
      
  2. 界面优化

    • 使用 HTML 和 CSS 来美化文件上传和下载的界面。
    • 示例代码:
      <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <button type="submit">上传</button>
      </form>
      <a href="/download/example.pdf">下载示例文件</a>
      

欢迎到 GitHub 帮忙完善,谢谢。


以上是关于文件上传和下载的基本实现和下一步需要解决的问题。希望这能帮助你进一步完善项目。

回到顶部