美文网首页
一个端到端的基于 form 表单的文件上传程序,包含客户端和服务

一个端到端的基于 form 表单的文件上传程序,包含客户端和服务

作者: _扫地僧_ | 来源:发表于2022-07-27 12:41 被阅读0次

    客户端

    实际上就是一个简单的 html 网页,源代码如下:

    <html>
    <form id="fu_form" enctype="multipart/form-data" method="post" action="http://localhost:3003/upload" style="display: inline-block;">
        <input type="file" name="myFileUpload" id="fileUploader-fu" tabindex="-1" size="1" title="Upload your file to the local server">
        <input type="submit" value="Submit">
    </form>
    </html>
    

    新建一个 .html 文件,把上面的源代码拷贝进去,用浏览器打开,看到如下页面。

    注意此时浏览器地址栏的 url:file:///C:/Code/UI5/Walkthrough/110/sample.html

    form 的 action 属性,指向硬编码的 "http://localhost:3003/upload",因此我们还需要编写一个服务器,监听在这个地址上,用于接收 form 上传的本地文件。

    服务器端

    一个采用 Node.js 开发的应用,单纯的接收客户端上传的文件,打印出文件名和文件大小。

    源代码如下:

    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.parse(req, function(err, fields, files) {
          var aResult = [];
          var aUploaded = files.myFileUpload;
          for( var i = 0; i < aUploaded.length; i++){
            console.log('file name: ', aUploaded[i].originalFilename, 'size: ' , aUploaded[i].size);
            aResult.push({
              name: aUploaded[i].originalFilename,
              size:aUploaded[i].size
            });
          }
          res.writeHead(200, { 'content-type': 'text/html' });
          res.end("<p>File uploaded ok!</p>");
        });
        return;
      }
    }).listen(PORT);
    
    console.log('listen on port:' + PORT);
    

    新建一个 ui5FileServer.js 文件,将上面的源代码,粘贴进去。

    使用方法

    执行命令行 npm init 初始化一个 npm 项目,然后将上述 ui5FileServer.js 文件粘贴进去。

    package.json 内容可以参考下面的代码:

    {
      "name": "sap.m.tutorial.walkthrough.109",
      "version": "1.0.0",
      "author": "SAP SE",
      "description": "最简单的 SAP UI5 本地文件上传的例子",
      "scripts": {
        "start": "ui5 serve",
        "build": "ui5 build"
      },
      "devDependencies": {
        "@ui5/cli": "^2.0.0",
        "express": "^4.12.4",
        "http-proxy": "latest"
      },
      "dependencies": {
        "multer": "^1.4.5-lts.1",
        "multiparty": "^4.2.3"
      }
    }
    
    

    在 npm 项目里,执行 npm install 安装依赖,然后用 node ui5FileServer.js 启动服务器,能看到下列输出:listen on port:3003

    说明服务器已经在监听 3003 端口,等待客户端上传文件了。

    回到客户端,点击 Choose File 从本地选择一个文件:

    下图的含义是选择了一个 1.txt 文件,点击 Submit 即可上传:

    点击 Submit 之后,注意到地址栏已经变成了:http://localhost:3003/upload

    并且打印出了 File uploaded ok! 的来自服务器端的响应。

    这就是我们在客户端网页 action 里编写的服务器端接收文件上传的地址。

    这个响应编写在服务器端的第 21 行代码处:

    相关文章

      网友评论

          本文标题:一个端到端的基于 form 表单的文件上传程序,包含客户端和服务

          本文链接:https://www.haomeiwen.com/subject/kzkzirtx.html