gpt4 book ai didi

javascript - GraphicsMagick 进程导致空文件

转载 作者:IT老高 更新时间:2023-10-28 23:26:41 25 4
gpt4 key购买 nike

我正在这样做

gm(jpgName).setFormat('jpg')
.resize(160,158)
.compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
if(err){
console.log(err,jpgName);
res.send(400);
}else{
console.log('file formated to jpg' + jpgName);

我得到了

{ [Error: Command failed: gm convert: Empty input file (/home/ubuntu/node/uploads/icon.jpg). ] code: 1, signal: null }

如果我在这里写的第一行之前停止代码,然后查看文件,它有一个文件长度。如果我让这个过程发生(出错)然后查看文件,那么它的大小为 0 字节。

我也试过这个:

fs.stat(jpgName, function (err, stats) {
console.log('file size:',stats.size);
gm(jpgName).setFormat('jpg')
.resize(160,158)
.compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
if(err){
console.log('console.log error writing jpg file',err,jpgName);
fs.unlink(jpgName);
callback(400);
return;
}else{//...

我得到了一个文件大小,所以在我开始这个过程之前我知道它不是空的。

编辑:我现在在 form.on('end') 上开始这个过程,所以我可以确定整个上传过程已经完成。

整个函数:

function formatProfileImage(req,form,file,callback){
console.log('formatting profile image');
var ext = file.name.split('.')[1].toLowerCase();
var name = encodeURIComponent(file.name.split('.')[0].toLowerCase());
var smallName = form.uploadDir+"/"+"small_"+name+".jpg";
var jpgName = form.uploadDir + "/" + name+'.jpg';

console.log('extension:',ext);
console.log('name:',name);
console.log('smallName:',smallName);
console.log('jpgName:',jpgName);

if(!(ext == "png" || ext == "jpeg"|| ext == "jpg"|| ext == "gif")){
fs.unlink(file.path);
console.log("extension rejected");
callback(415);
return;
}

console.log('renaming file from ' + file.path + ' to ' + jpgName);

fs.rename(file.path,jpgName,function(err){
if(err){
console.log('error renaming file',err);
callback(400);
return;
}

console.log('file renamed');
fs.stat(jpgName, function (err, stats) {
console.log('file size:',stats.size);
if(!(typeof req.query.tenant === 'undefined')){
//rename to jpg
gm(jpgName).setFormat('jpg')
.resize(160,158)
.compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
if(err){
console.log('console.log error writing jpg file',err,jpgName);
fs.unlink(jpgName);
callback(400);
return;
}else{
console.log('file formated to jpg' + jpgName);
//make "thumbnail"
gm(jpgName).setFormat('jpg')
.resize(50)
.write(fs.createWriteStream(smallName),function(err){
if(err){
fs.unlink(smallName);
console.log('error writing thumbnail',err,smallName);
callback(400);
return;
}else{
console.log('thumbnail created' + smallName);
//upload everything
uploadS3(jpgName,req.query.tenant,function(back){
if(back.success){
console.log('success ' +back.url);
callback(back.url);
fs.unlink(jpgName);
}else{
console.log('error uploading' + jpgName, back);
callback(400);
fs.unlink(jpgName);
return;
}
});
uploadS3(smallName,req.query.tenant,function(back){
if(back.success){
console.log('success ' +back.url);
fs.unlink(smallName);
}else{
console.log('error uploading ' + smallName, back);
callback(400);
fs.unlink(smallName);
return;
}
});
}
});
}
});
}
});
});
}

最佳答案

.write() 接受字符串作为路径。所以你需要用字符串替换你的流(位置,我必须保存生成的图像)​​。

GM支持3种文件保存方式。

1) 保存到文件。简单,只需使用 .write() 并作为参数字符串发送,文件应该保存在哪里。示例:

gm('image.png')
.resize()
.write('resized.png', function (error) {
if (error) {
console.error(error);
}
});

2) 使用流,例如:

gm('image.png')
.resize()
.stream(function (error, stdout, stderr) {
var writeStream = fs.createWriteStream('resized.jpg');
stdout.pipe(writeStream);
});

3) 最后一个 - 缓冲区:

gm('image.png')
.resize()
.toBuffer(function (error, buffer) {
if (error) {
console.error(error);
}
});

关于javascript - GraphicsMagick 进程导致空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25372402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com