首页 > 代码库 > nodejs 简单http 文件上传demo
nodejs 简单http 文件上传demo
// 这是一个简单的Node HTTP,能处理当前目录的文件// 并能实现良种特殊的URL用于测试// 用http://localhost:8000 或http://127.0.0.1:8000 连接这个服务器// 首先,加载所有要用的模块var http = require(‘http‘); // HTTP服务器APIvar fs = require(‘fs‘); // 文件系统APIvar server = new http.Server(); // 创建新的HTTP服务器var port = 8000;server.listen(port); // 在端口8000伤运行它var log = require(‘util‘).log;log(‘Http Server is listening ‘ + port + ‘ port.‘);// Node使用‘on‘方法注册事件处理程序// 当服务器收到新请求,则运行函数处理它server.on(‘request‘, function(request, response) { var filename = null; // 解析请求的URL var url = require(‘url‘).parse(request.url); switch(url.pathname) { case ‘/upload‘: var _fileName = request.headers[‘file-name‘]; log(_fileName); request.once(‘data‘, function(data) { // 大文件// var fis = fs.createWriteStream(‘/txt.txt‘);// fis.write(data);// fis.end(); fs.writeFile(_fileName, data); response.end(); }); break; case ‘/‘ || ‘/index.html‘ : filename = ‘index.html‘; default: filename = filename || url.pathname.substring(1); // 去掉前导‘/‘ // 基于其扩展名推测内容类型 var type = (function(_type) { switch(_type) { // 扩展名 case ‘html‘: case ‘htm‘: return ‘text/html; charset=UTF-8‘; case ‘js‘: return ‘application/javascript; charset=UTF-8‘; case ‘css‘: return ‘text/css; charset=UTF-8‘; case ‘txt‘: return ‘text/plain; charset=UTF-8‘; case ‘manifest‘: return ‘text/cache-manifest; charset=UTF-8‘; default: return ‘application/octet-stream‘; } }(filename.substring(filename.lastIndexOf(‘.‘) + 1))); // 异步读取文件,并将内容作为单独的数据块传回给回调函数 // 对于确实很大的文件,使用API fs.createReadStream()更好 fs.readFile(filename, function(err, content) { if (err) { // 如果由于某些原因无法读取文件 response.writeHead(404, {‘Content-type‘ : ‘text/plain; charset=UTF-8‘}); response.write(err.message); } else { // 否则读取文件成功 response.writeHead(200, {‘Content-type‘ : type}); response.write(content); // 把文件内容作为响应主体 } response.end(); }); }});
index.html
<html><head><title>file test</title><script>window.onload=function(){ var files = document.getElementsByTagName(‘input‘), len = files.length, file; for (var i = 0; i < len; i++) { file = files[i]; if (file.type !== ‘file‘) continue; // 不是文件类型的控件跳过 file.onchange = function() { var _files = this.files; if (!_files.length) return; if (_files.length === 1) { // 选择单个文件 var xhr = new XMLHttpRequest(); xhr.open(‘POST‘, ‘http://localhost:8000/upload‘); var filePath = files[0].value; xhr.setRequestHeader(‘file-name‘, filePath.substring(filePath.lastIndexOf(‘\\‘) + 1)); xhr.send(_files[0]); } else { } }; }};</script></head><body> <input type="file" /></body></html>
访问http://localhost:8000/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。