使用 HTML input 元素上传本地文件,在服务器端打印出上传的内容

简介: 使用 HTML input 元素上传本地文件,在服务器端打印出上传的内容

需求


在本地通过 HTML input 元素,支持上传多个文本文件到服务器。


服务器采取 Node.js 实现,将本地上传的文本文件内容打印出来。


实现效果


先看一下本文介绍的代码片段执行的效果。


本文介绍的程序,启动了一个在 3003 端口上监听的服务器。浏览器访问 localhost:3003,能看到如下界面:


点击 Choose Files,弹出文件上传对话框,可以选择上传多个本地文本文件。

f3b4b527b2c393e6e34a4d6ebf6c666f.png

这里我选择了本地两个名为 1.txt 和 2.txt 的文本文件,内容分别为:

b32ab07947073fc506d327d23f6d94a9.png

选定之后,Choose Files 控件右边,显示为 2 files,意思是有两个本地文件等待上传。

2a9fdbb06bf2b023abe70b1ff42e99c9.png

点击上图的 upload your file 之后,在服务器的控制台,能看到依次打印出第一个文件的文件名,文件内容,然后是第二个文件的文件名,文件内容,说明上传成功:

ac975101b1efc68479e7998c793e1de4.png

下面是本需求具体的实现步骤。


实现步骤


本需求采取 Node.js 技术栈实现。


使用 npm init 命令行新建一个基于 npm 的 Node.js 项目,package.json 文件内容如下:

{
  "name": "file.upload.test",
  "version": "1.0.0",
  "author": "Jerry",
  "description": "File upload test",
  "scripts": {
    "start": "ui5 serve",
    "build": "ui5 build"
  },
  "devDependencies": {
    "express": "^4.12.4"
  },
  "dependencies": {
    "multiparty": "^4.2.3"
  }
}


从 package.json 文件的 dependencies 区域能看出,我们使用了一个叫做 multiparty 的库。


新建一个 fileUploadServer.js 文件,完整源代码只有 33 行,内容如下:


var multiparty = require('multiparty');
var http = require('http');
var util = require('util');
const PORT = 3003;
http.createServer(function(req, res) {
  if (req.url === '/upload' && req.method === 'POST') {
    var form = new multiparty.Form();
    form.on('part', function(part) {
        console.log(part.filename);
        part.setEncoding('utf8');
        part.on('data',function (chunk){
          console.log(chunk)
        });
        part.on('end',function (){
          console.log('读取结束');
        });
    });
    form.parse(req);
  }
  res.writeHead(200, { 'content-type': 'text/html' });
  res.end(
    '<form action="/upload" enctype="multipart/form-data" method="post">'+
    '<input type="text" name="title"><br>'+
    '<input type="file" name="upload" multiple="multiple"><br>'+
    '<input type="submit" value="upload your file">'+
    '</form>'
  );
}).listen(PORT);
console.log('listen on port:' + PORT);


进入 package.json 和 fileUploadServer.js 文件所在的文件夹,执行命令行 npm install,安装 package.json 文件里定义的依赖,然后命令行 node fileUploadServer.js, 就可以启动服务器了:

262ac407559d277d55a265a7951e90b1.png

看到提示消息 listen on port:3003 说明服务器启动成功了,接下来按照文件前面提示的步骤进行测试即可。


目录
相关文章
|
5月前
|
搜索推荐 API SEO
Angular 服务器端渲染的静态 HTML 变为客户端的动态应用的过程
Angular 服务器端渲染的静态 HTML 变为客户端的动态应用的过程
67 1
|
6月前
|
JavaScript UED
Angular 服务器端渲染场景里,服务器端和客户端渲染出的 HTML 源代码有可能不完全一致
Angular 服务器端渲染场景里,服务器端和客户端渲染出的 HTML 源代码有可能不完全一致
60 0
|
数据采集
正则表达式匹配html标签,获取标签内容
正则表达式匹配html标签,获取标签内容
|
9月前
|
前端开发 PHP
web开发HTML生成PDF的三种解决方案(服务器端mpdf、html2canvas.js、浏览器打印、PDF虚拟打印机)
web开发HTML生成PDF的三种解决方案(服务器端mpdf、html2canvas.js、浏览器打印、PDF虚拟打印机)
780 0
|
10月前
|
存储 缓存 JavaScript
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
为了解决调用一些依赖的如echarts等一些js的代码模块引入的问题,就需要静态文件了。 本篇解说StaticFileController,在返回的html文本中调用外部js文件,类似的,其他文件都是一样了,只是引入的后缀名不一样。
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
|
10月前
|
XML JSON 前端开发
Qt+QtWebApp开发笔记(五):http服务器html中使用json触发ajax与后台交互实现数据更新传递
前面完成了页面的跳转、登录,很多时候不刷新页面就想刷新局部数据,此时ajax就是此种技术,且是异步的。   本篇实现网页内部使用js调用ajax实现异步交互数据。   在js中使用 ajax是通过XMLHttpRequest来实现的。
|
XML JavaScript 前端开发
具备spring环境的测试头注解;xml 规则;JavaScript:改变 HTML 内容案例
具备spring环境的测试头注解 具备spring环境的测试头注解 test
119 1
具备spring环境的测试头注解;xml 规则;JavaScript:改变 HTML 内容案例
|
JavaScript
【Node.js练习】根据不同的url响应不同的html内容
【Node.js练习】根据不同的url响应不同的html内容
83 1
【Node.js练习】根据不同的url响应不同的html内容
|
前端开发 Python
HTML通过Ajax上传图像至Django后端并转换为Mat图像
HTML通过Ajax上传图像至Django后端并转换为Mat图像
|
JavaScript 前端开发 BI
04-HTML相关内容总结
04-HTML相关内容总结
74 0
04-HTML相关内容总结