gpt4 book ai didi

javascript - Express GraphicsMagick

转载 作者:行者123 更新时间:2023-12-02 17:21:55 24 4
gpt4 key购买 nike

我目前正在构建一个 MEAN 应用程序,我当前正在处理的部分涉及图像上传。我正在尝试使用GraphicsMagick for Node但我并没有真正取得任何成功。以下是我的图像上传 POST 请求(按原样):

app.post('/api/users/upload_image', function (req, res) {
var fstream;
req.pipe(req.busboy);
req.busboy.on('file', function (fieldname, file, filename) {
console.log('\n\nUploading file: '.underline.bold +filename .underline.bold);


// var readStream = fs.createReadStream(filename);
// gm(readStream, readStream.path)
// .resize('200','200')
// .stream(function (err, stdout, stderr) {
// var writeStream = fs.createWriteStream('www/uploads/' + readStream.path);
// stdout.pipe(writeStream);
// });

fstream = fs.createWriteStream('www/uploads/' + filename);
file.pipe(fstream);

});

req.busboy.on('finish', function () {
res.writeHead(303, { Connection: 'close', Location: '/' });
res.end();
});
});

注释掉的部分是我尝试使用 GM,但会抛出错误:Error: ENOENT, open '[filename].jpg'

我哪里出错了?这是我第一次尝试使用 GM,所以我是这个库的新手!

最佳答案

var readStream = fs.createReadStream(filename);

在这一行,名为 filename 的文件实际上并不存在,但您将该文件写入注释行下方。您所拥有的是读取从 busyboy 获得的名为 file 的 steam。所以去掉这一行并将 file 直接传递给 gm

gm(file,....

下面的代码完全符合您的要求,请注意 gm 的 write 函数的参数。

app.post('/api/users/upload_image', function (req, res) {
req.pipe(req.busboy);
req.busboy.on('file', function (fieldname, file, filename) {
console.log('\n\nUploading file: '.underline.bold +filename .underline.bold);

console.log('Resizing file...');

gm(file,'www/uploads/' + filename)
.resize(200,200)
.write('www/uploads/' + filename, function (err) {
console.log("finished");
});
});

req.busboy.on('finish', function () {
res.writeHead(303, { Connection: 'close', Location: '/' });
res.end();
});
});

请注意,以这种方式使用时,gm 的调整大小只是将图像放入 200x200 框中,而不是完全将其重新缩放/拉伸(stretch)到 200x200。

如果这仍然给您带来类似 EPIPE 的错误,则您的 Node 进程可能没有足够的权限来写入该文件。

关于javascript - Express GraphicsMagick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860390/

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