node往服务器上传文件,node.js中的上传文件至服务器

//Buffer 的split方法

let buffer = new Buffer('abc\r\nddasdfafd\r\ndfaerewtwert');

function bufferSplit(buffer, delimiter){

let res = [];

let n = 0;

while((n = buffer.indexOf(delimiter)) !== -1){

res.push(buffer.slice(0, n));

buffer = buffer.slice(n + delimiter.length);

}

res.push(buffer);

return res;

}

console.log(bufferSplit(buffer, '\r\n').map(e => e.toString()));

//原生 node.js 实现post上传文件

const http = require('http');

const util = require('buffer_util.js');

const fs = require('fs');

http.createServer((req, res) => {

let boundary='--'+req.headers['content-type'].split('; ')[1].split('=')[1];

let arr = [];

req.on('data', Buffer => {

arr.push(Buffer);

});

req.on('end', () => {

let buffer = Buffer.concat(arr);

let res = util.bufferSplit(buffer, boundary);

// console.log(res);

res.pop();

res.shift();

res.forEach(buffer => {

buffer = buffer.slice(2, buffer.length - 2);

let n = buffer.indexOf('\r\n\r\n');

let info=buffer.slice(0, n).toString();

let data=buffer.slice(n+4);

// console.log(info);

/*

Content-Disposition: form-data; name="username"

Content-Disposition: form-data; name="password"

Content-Disposition: form-data; name="f1"; filename="prototype.png"

Content-Type: image/png

*/

if(info.indexOf('\r\n') !== -1){

//文件

let res2 = info.split('\r\n')[0].split(';');

let name = res2[1].split('=')[1];

let filename = res2[2].split('=')[1];

name = name.substring(1, name.length-1);

filename = filename.substring(1, filename.length-1);

// console.log(name); //"f1"

fs.writeFile(`upload/${filename}`, data, err => {

if(err){

console.log(err);

}else{

console.log('上传成功');

}

})

}else{

//普通信息

let name = info.split('; ')[1].split('=')[1];

name = name.substring(1, name.length - 1);

console.log(name)

}

})

});

}).listen(8080);

//使用 multiparty 实现表单提交处理

const http = require('http');

const multiparty = require('multiparty');

http.createServer((req, res)=>{

let form = new multiparty.Form({

uploadDir: './upload'

});

form.parse(req);

form.on('field', (name, value) => {

console.log('字段:', name, value);

});

form.on('file', (name, file) => {

console.log('文件:', name, file);

});

form.on('close', () => {

console.log('表单解析完成');

});

}).listen(8080);

// CORS 跨域共享

const http=require('http');

let allowOrigin={

'http://localhost': true,

'http://aaa.com': true,

'https://aaa.com': true,

}

http.createServer((req, res)=>{

let {origin}=req.headers;

if(allowOrigin[origin]){

res.setHeader('access-control-allow-origin', '*');

}

res.write('{"a": 12, "b": "Blue"}');

res.end();

}).listen(8080);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值