Sharp error: [Error: Input file is missing]
Sharp error: [Error: Input file is missing]
我通过request
下载图片,然后通过sharp
处理图片。
但是出现输入文件丢失的错误,其实变量body
是有值的。
import { IADLandingPageABTest } from '@byted/ec-types';
import request from 'request';
import sharp from 'sharp';
const images: Array<keyof IADLandingPageABTest> = ['topPosterUrl', 'bottomPosterUrl'];
export default function handleImage (config: IADLandingPageABTest) {
images.forEach(key => {
const url = config[key];
if (url && typeof url === 'string' ) {
request(url, (err, response, body) => {
//console.log('body', body);
//body has a value
if (!err && response.statusCode === 200) {
sharp(body)
.resize(100)
.toBuffer()
.then((data) => {
console.log(data.toString('base64'));
})
.catch( err => { console.log('error', err) });
}
})
}
});
}
我在 sharp
存储库中发现了一个概述了解决方案的问题:
the request
module expects encoding
to be set to receive body
as a Buffer
.
- request(url, function(error, response, body) {
+ request({ url, encoding: null }, function(error, response, body) {
来源:https://github.com/lovell/sharp/issues/930#issuecomment-326833522
我想指出我做的错误!
如果您使用的 multer 库在 运行 之后将缓冲区保留在 req.file,那么请确保 file/buffer在尖锐的内部传递是
正确。
下面是我使用的代码,我确实遇到了问题中提到的相同错误。(我使用 multer 进行文件上传)
sharp(req.file)
.resize({ width: 75,height: 75 })
.toBuffer()
.then(data => {
console.log("data: ",data);
res.send("File uploaded");
}).catch(err =>{
console.log("err: ",err);
});
req.file是一个对象!
req.file: {
fieldname: 'file',
originalname: 'Sample.gif',
encoding: '7bit',
mimetype: 'image/gif',
buffer: <Buffer 47 49 46 38 39 61 57 04 56 02 f7 00 31 00 ff 00 09 73 22 0c 76
14 33 23 ... 797643 more bytes>,
size: 797693
}
我已经通过了 req.file 这反过来是一个不是文件的对象 exactly.Rather 里面的缓冲区属性 req.file 是我的实际文件缓冲区
需要在 sharp
内给出
所以通过使用下面的代码,我没有遇到任何错误并且我的代码有效!
sharp(req.file.buffer)
.resize({ width: 75,height: 75 })
.toBuffer()
.then(data => {
console.log("data: ",data);
res.send("File uploaded");
}).catch(err =>{
console.log("err: ",err);
});
我通过request
下载图片,然后通过sharp
处理图片。
但是出现输入文件丢失的错误,其实变量body
是有值的。
import { IADLandingPageABTest } from '@byted/ec-types';
import request from 'request';
import sharp from 'sharp';
const images: Array<keyof IADLandingPageABTest> = ['topPosterUrl', 'bottomPosterUrl'];
export default function handleImage (config: IADLandingPageABTest) {
images.forEach(key => {
const url = config[key];
if (url && typeof url === 'string' ) {
request(url, (err, response, body) => {
//console.log('body', body);
//body has a value
if (!err && response.statusCode === 200) {
sharp(body)
.resize(100)
.toBuffer()
.then((data) => {
console.log(data.toString('base64'));
})
.catch( err => { console.log('error', err) });
}
})
}
});
}
我在 sharp
存储库中发现了一个概述了解决方案的问题:
the
request
module expectsencoding
to be set to receivebody
as aBuffer
.
- request(url, function(error, response, body) {
+ request({ url, encoding: null }, function(error, response, body) {
来源:https://github.com/lovell/sharp/issues/930#issuecomment-326833522
我想指出我做的错误!
如果您使用的 multer 库在 运行 之后将缓冲区保留在 req.file,那么请确保 file/buffer在尖锐的内部传递是 正确。
下面是我使用的代码,我确实遇到了问题中提到的相同错误。(我使用 multer 进行文件上传)
sharp(req.file)
.resize({ width: 75,height: 75 })
.toBuffer()
.then(data => {
console.log("data: ",data);
res.send("File uploaded");
}).catch(err =>{
console.log("err: ",err);
});
req.file是一个对象!
req.file: {
fieldname: 'file',
originalname: 'Sample.gif',
encoding: '7bit',
mimetype: 'image/gif',
buffer: <Buffer 47 49 46 38 39 61 57 04 56 02 f7 00 31 00 ff 00 09 73 22 0c 76
14 33 23 ... 797643 more bytes>,
size: 797693
}
我已经通过了 req.file 这反过来是一个不是文件的对象 exactly.Rather 里面的缓冲区属性 req.file 是我的实际文件缓冲区 需要在 sharp
内给出所以通过使用下面的代码,我没有遇到任何错误并且我的代码有效!
sharp(req.file.buffer)
.resize({ width: 75,height: 75 })
.toBuffer()
.then(data => {
console.log("data: ",data);
res.send("File uploaded");
}).catch(err =>{
console.log("err: ",err);
});