node存储文件-formidable的使用

formidable库

formidable

formidable接收图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
let form = new formidable.IncomingForm();
form.encoding = 'utf-8'; // 编码
form.keepExtensions = true; // 保留扩展名
form.maxFieldsSize = 2 * 1024 * 1024; // 文件大小
form.uploadDir = '/usr/local/workspace/xiaoniaoFile/jiemian' // 存储路径
// form.uploadDir = './files' // 存储路径(本地调试)
form.parse(req,function(err,fileds,files){ // 解析 formData数据
if(err){ return console.log(err) }
console.log ("files", files);
let imgPath = files.img.path; // 获取文件路径
console.log ("imgPath", imgPath);
let imgName = imgPath.split("/");
// 修改之后的名字
let imgSrc = imgName[imgName.length-1];
// console.log ("imgName", imgName)
let data = fs.readFileSync(imgPath) // 同步读取文件
fs.writeFile(imgPath,data,function(err){ // 存储文件
if(err){
console.log(err)
res.send({
status:0,
msg:'头图上传失败',
path: imgPath,
err: err,
src: imgSrc?imgSrc:""
})
}else{
res.send({
status:1,
msg:'头图上传成功',
path: imgPath,
src: `http://返回你的图片域名/${imgSrc}`
})

}

// fs.unlink(imgPath,function(){}) // 删除文件
})
})

request entity too large错误的解决

出现这个错误的解决方式在网上查有的说是从nginx入手解决
因为我本地是用nodemon监听开发,所以采用如下方式:

1
2
3
4
5
6
//app.js中间件中进行处理

var bodyParser = require('body-parser')
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

体系延伸-前端上传图片

这里贴上前端进行图片上传的示例代码,可以结合起来使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$('#addJiemianNews').click(function(e){
e.preventDefault()//阻止默认事件
var obj = new FormData();
obj.append("img",$("#readyImg").get(0).files[0]);//get(0)是有必要的
let thisImg = $('#readyImg').get(0).files[0];

if( thisImg ){
console.log("thisImg", thisImg );
}else{
console.log(`你还没上传头图`);
alert(`头图不能是空`);
return false;
}
$.ajax({
url:host + '/addJiemianNewsImg',
type:"post",
data:obj,
processData:false, // 不处理数据
contentType : false, // 不设置请求头
cache:false,
success:function(data){
//console.log(data)
//其他回调
$.post(host + '/addJiemianNews', {
path: data.path?data.path:"",
art_link: $("input[name='art_link']").val().replace(/\s+/g,''),
src: data.src?data.src.replace(/\s+/g,''):""
},(data)=>{
//console.log(data)
if( data.status == 1 ){
alert( data.msg );
}
$('#closeJiemianNewsModal').click();
});

}
})
});