从零学习node.js之搭建http服务器(二)

2020-06-17 06:06:00易采站长站整理

在 uploader.js 中:


// uploader.js
var formidable = require('formidable'),
util = require('util'),
fs = require('fs');

function upload(request, response){
if( request.method.toLowerCase()=='post' ){
var form = new formidable.IncomingForm();

form.uploadDir = './tmp/';
form.parse(request, function(err, fields, files) {
var oldname = files.upload.name,
newname = Date.now() + oldname.substr(oldname.lastIndexOf('.'));
fs.renameSync(files.upload.path, "./img/"+newname ); // 上传到 img 目录

response.writeHead(200, {'content-type': 'text/plain'});
response.write('received upload:nn');
response.end(util.inspect({fields: fields, files: files}));
});
return;
}
}
exports.upload = upload;

我们上传图片后跳转到upload路径,然后显示出相应的信息:


received upload:

{
fields: { // 其他控件,如input, textarea等
submit: 'submit'
},
files:{ // file控件
upload:{
domain: null,
_events: {},
_maxListeners: undefined,
size: 5097,
path: 'tmpupload_b1f7c3e83af224e9f3a020958cde5dcd',
name: 'chrome.png',
type: 'image/png',
hash: null,
lastModifiedDate: Thu Jan 12 2017 23:09:50 GMT+0800 (中国标准时间),
_writeStream: [Object] }
}
}

我们再查看img目录时,就会发现我们刚才上传的照片了。

4.2 图片显示

将图片上传到服务器后,怎样才能把图片显示在浏览器上呢。这里我们就使用到了fs模块来读取文件,创建一个shower.js来专门展示图片:


// shower.js
var fs = require('fs'),
url = require('url');

function show(request, response){
var query = url.parse(request.url, true).query,
imgurl = query.src;

// 读取图片并进行输出
// 这里读取链接中的src参数,指定读取哪张图片 /show?src=1484234660592.png
fs.readFile('./img/'+imgurl, "binary", function(err, file){
if(err) throw err;
response.writeHead(200, {"Content-Type": "image/png"});
response.write(file, "binary");
response.end();
})
}
exports.show = show;

然后在 server.js 中添加上 show 的路由映射:


var routeurl = {
'/' : starter.start,
'/upload' : uploader.upload,
'/show' : shower.show // 添加
};

最后在 upload.js 中进行图片的引用:


form.parse(request, function(err, fields, files) {
var oldname = files.upload.name,
newname = Date.now() + oldname.substr(oldname.lastIndexOf('.'));
fs.renameSync(files.upload.path, "./img/"+newname ); // 同步上传图片