// 这是一个简单的Node HTTP,能处理当前目录的文件
// 并能实现良种特殊的URL用于测试
// 用http://localhost:8000 或http://127.0.0.1:8000 连接这个服务器 // 首先,加载所有要用的模块
var http = require('http'); // HTTP服务器API
var fs = require('fs'); // 文件系统API var 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/

最新文章

  1. 页面Button/Link 传参数
  2. [转]在 ASP.NET MVC 4 中创建为移动设备优化的视图
  3. Flask备注三(Context)
  4. HTML 5表单应用小结
  5. TinyFrame升级之三:逻辑访问部分
  6. mysql-创建库之问题
  7. 启用VTX技术支持启动android的虚拟机 - 报错
  8. C code 字符串与整数的相互转化
  9. SpringMvc异常
  10. JqGrid在IE8中表头不能分组的解决办法
  11. 好几个div(元素)找到最后一个
  12. [Python][小知识][NO.1] Python字符串前 加 u、r、b 的含义
  13. openLDAP安装时无法操作根节点数据,提示的是This base cannot be created with PLA.
  14. winform datagridview 不显示默认第一列 不显示未绑定列 数据源发生改变时自动更新 (转)
  15. 【Eclipse】eclipse生成类图、类交互图、包依赖图
  16. 300. Longest Increasing Subsequence(LIS最长递增子序列 动态规划)
  17. MdiContainer
  18. tcp发送缓冲区中的数据都是由产生数据的进程给推送到ip层还是有定时任务触发?
  19. &lt;译&gt;Spark Sreaming 编程指南
  20. javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等

热门文章

  1. OpenCV——识别手写体数字
  2. Linux 编译安装httpsqs
  3. php 如何写入、读取word,excel文档
  4. bootstrap 模版
  5. 文成小盆友python-num6 -反射 ,常用模块
  6. iOS学习之自定义UItableViewCell
  7. 用Altium designer画PCB的一般心得
  8. C++类静态成员的初始化和用法探讨
  9. c语言局部变量 静态局部变量 全局变量与静态全局变量
  10. 使用教程 - BestSync同步软件 - SQL2008R2 数据库定时备份解决方案