node 搭建本地文件上传服务器

本文介绍了如何使用Node.js和Express搭建一个简单的文件服务器,包括处理文件上传、重命名及返回存储路径。通过设置跨域访问,实现前端上传文件到服务器,并返回文件存储地址。此外,还提供了前端使用Vue进行测试的代码示例。
摘要由CSDN通过智能技术生成

一直想尝试使用node搭建个文件服务器,今天简单写了一下,后面会慢慢完善,一起学习哈

首先,我们在做文件上传的时候,很多时候会使用到文件服务器. 从前端来说的话, 我们把数据上传到文件服务器上,然后文件服务器返回给我们一个你所上传文件的一个访问地址

也就是说文件服务器首先要读取到我们前端所上传的数据,接着,需要把文件存放到服务器的指定目录下,最后把存储地址存入数据库并返回给前台

了解了原理之后,做起来思路就比较明确了

准备工作

     需要保证拥有node环境

     具体的node的安装(windows和linux)见博主的另一篇博客:https://blog.csdn.net/rolinabc/article/details/99623255?spm=1001.2014.3001.5501

     创建一个文件夹node(任意名字),再文件夹下创建一个文件 serve.js(服务器文件)和index.html(前端测试文件),还有uploads文件夹(用于存储前端上传的文件夹)

     在node文件夹下打开控制台,执行 npm init ,执行完成之后会生成一个package.json文件,即配置文件

server文件的完善

    具体代码如下所示, 注释的很详细哦

    

// 要使用npm install 安装express和formidable 
// 要保证和当前文件夹同级,拥有uploads文件夹
var Express = require('express');
var App = Express();
var Path = require('path');
var Formidable = require('formidable');
var FS = require('fs');
 
App.all('*',function (req, res, next) {
  // 解决跨域
  res.header('Access-Control-Allow-Origin', '*');
  // 设置相应头数据
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
  // 设置接收的方法
  res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
  next();
});
 
App.post('/upload', function(req, res){
  // 创建一个表单对象
    var form = new Formidable.IncomingForm();
    //  开启该功能,当调用form.parse()方法时,回调函数的files参数将会是一个file数组,数组每一个成员是一个File对象,此功能需要 html5中multiple特性支持。
    form.multiples = true;
    // 设置当前上传的文件存储到,当前文件的/uploads文件夹下
    form.uploadDir = Path.join(__dirname, '/uploads');
    var dirUrl
    // 监听上传的文件数据
    form.on('file', function(field, file) {
        var newName = file.name;
        // 重命名
        FS.rename(file.path, Path.join(form.uploadDir,newName),function(err) {
            if(err){
                throw err;
            }
        });
        // 得到当前上传文件的存储路径
        dirUrl = Path.join(form.uploadDir,newName)
    });
    // 监听报错
    form.on('error', function(err) {
        console.log('An error: \n' + err);
    });
    // 当接受数据完成时,将当前上传的文件的目录返回给前台
    form.on('end', function() {
        res.send(dirUrl);
    });
    // 解析请求中携带的数据
    form.parse(req);
  });
 
  // 启动服务设置端口
  var server = App.listen(1000, function(){
      console.log('Files Server listening on port 1000');
  })

前端的测试代码

    我这里是使用了vue,这个无所谓,仅供参考,你自己写原生的也可以测试哈

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.9/vue.js"></script>
  <!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
   <div id="main">
    <el-upload
    class="upload-demo"
    action="http://localhost:1000/upload"
  >
    <el-button size="small" type="primary">点击上传</el-button>
  </el-upload>
   </div>
   <script>
     new Vue({
       el:'#main',
       data:{}
     })
   </script>
</body>
</html>

 结合上面的代码,就是搭建一个本地文件服务器了,当然了,我是直接一次性的返回了你所上传的文件的路径,而并没有将其路径存入数据库中

这步比较简单了,毕竟路径都拿到了.

如果不会将数据插入数据库的话,可以见我的另外一篇博客:https://blog.csdn.net/rolinabc/article/details/107003549?spm=1001.2014.3001.5501

(疯狂安利自己的博客,啊哈哈哈)

前端小菜鸟,希望可以批评指正,共同学习,进步哈

 

 

要在 Node搭建一个 FTP 服务器,你可以使用 `ftp-srv` 模块。下面是一个基本的示例: 首先,安装 `ftp-srv` 模块: ``` npm install ftp-srv ``` 然后,在你的 Node.js 文件中,添加以下代码: ```javascript const FtpSrv = require('ftp-srv'); const ftpServer = new FtpSrv({ url: 'ftp://localhost:21', pasv_url: 'ftp://localhost:3000', greeting: 'Welcome to my FTP server' }); ftpServer.on('login', ({connection, username, password}, resolve, reject) => { // 验证用户名和密码 if (username === 'username' && password === 'password') { resolve({root: './ftp'}); } else { reject(new Error('Invalid username or password')); } }); ftpServer.listen().then(() => { console.log('FTP server listening on port 21'); }); ``` 上述代码创建了一个 `FtpSrv` 实例,并监听了 `login` 事件。当有用户尝试连接 FTP 服务器时,会触发 `login` 事件,并传递一个包含连接信息、用户名和密码的对象。在 `login` 事件处理函数中,你需要验证用户名和密码是否正确,并决定用户可以访问哪些文件夹。如果验证通过,可以使用 `resolve` 函数返回一个包含根目录路径的对象;否则,可以使用 `reject` 函数返回一个错误对象。 最后,调用 `listen()` 方法启动 FTP 服务器并监听指定端口。在上述代码中,FTP 服务器将在本地监听 21 端口,并使用 3000 端口作为被动模式的数据传输端口。FTP 服务器启动后,你可以使用 FTP 客户端连接到它,并上传、下载、删除和重命名文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值