<!DOCTYPE html><html><body><form method="post" enctype="multipart/form-data" action="/file/upload"><input type="file" name="file" /><br><input type="submit" value="Upload" /></form></body></html>浏览器显示效果是这样的:
点击空白长条或“浏览…”按钮可以打开文件浏览窗口选择需要上传的文件:
建立服务器接收文件逻辑
服务器文件 websvr.js 代码是这样的:
var fs = require("fs")var path = require("path")var onceio = require("../onceio/onceio")var app = onceio()app.get("/", function(req, res){res.render("file.html")})app.file("/file/upload", function(req, res) {var fileInfo = req.files.file || {}fs.link(fileInfo.path, path.join("./fileStore", fileInfo.name))res.send("File Uploaded Successfully")}).before(function(req, res) {var contentLength = req.headers["content-length"] || 0if (contentLength > 1048576) {res.send({ error: "Error: File Size Limit (1 MB) Exceeded" })} else {return true}})var fs = require("fs") 和 var path = require("path") 分别导入了 Node.js 提供的用于操作文件的文件系统(fs)模块和用于处理文件路径的 path 模块。
var timestampName = function(fileName){// get filename extensionvar extName = path.extname(fileName) // get base name of the filevar baseName = path.basename(fileName, extName)// insert timestamp between base name and filename extension// the plus sign ("+") before new Date() converts it into a numberreturn baseName + +new Date() + extName}再把 fs.link 语句里的 fileInfo.name 替换为 timestampName(fileInfo.name):
fs.link(fileInfo.path, path.join("./fileStore", timestampName(fileInfo.name)))改进后的服务器程序就能允许用户上传重名文件了,以上传 5 次名为 "cache_workflow.png" 的文件为例,服务器的文件存储地址中会出现 5 个名称都以 "cache_workflow" 开头但时间戳不同的文件:
OnceIO地址: https://github.com/OnceDoc/onceio
示例源码: https://github.com/OnceDoc/OnceAcademy/tree/master/Lesson14
以上所述是小编给大家介绍的Node.js开发教程之基于OnceIO框架实现文件上传和验证,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!