nodejs 簡單http 文件上傳demo


// 這是一個簡單的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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM