当尝试写入图像文件时,它会向前移动并延迟写入
When trying to write image file it moves ahead and write works late
我想在这里做的是在用节点调整大小后写一个图像文件,然后我将用它来上传它。但是当我写它的时候我的上传代码开始了,文件还没有写。
async function getdataFromJimpSmall(image,filePath,FILE_NAME){
try{
var isSucess = false ;
const im = await Jimp.read(image);
return new Promise((resolve, reject) => {
try{
im.resize(150, 215, Jimp.RESIZE_BEZIER, function(err){
if (err) throw err;
});
im.write(filePath+FILE_NAME)
resolve(true)
}
catch(err){
console.log(err);
reject(false);
}
})
}
catch(err){
console.log('getdataFromJimpSmall Err====>'+err)
return false
}
}
我尝试使用它,但它超出了我的代码
它从这里开始,从这里被调用。
isThumbnailUrlavailable = await jimpController.imageCoverJimpAndUploadToS3small(getISBNBook, "-@gmail.com", "SaleIsbn")
isThumbnailUrlavailableMedium = await jimpController.imageCoverJimpAndUploadToS3medium(getISBNBook, "-@gmail.com", "SaleIsbn")
第一个函数 imageCoverJimpAndUploadToS3small() 是这样的:
exports.imageCoverJimpAndUploadToS3small = async (getContent,email,file) =>{
try{
var elementType = 15;
var filePath = path.join(__dirname, '../../uploads/t/')
var FILE_NAME = `${getContent.contentMetaDataRef.isbn}_s.jpg`
var image = getContent.thumbnail
let tempdata = await getdataFromJimpSmall(image,filePath,FILE_NAME)
console.log('temp - ', tempdata);
if(tempdata==true)
{
var data = await commonController.uploadthumbnailTOPublicS3(filePath, FILE_NAME)
console.log('s3', data);
requestImageSize(data.url).then(size =>
{
console.log(size);
if(size.height>0&&size.width>0)
{
tempdata=true;
const getContentElement = ContentElement.findOne({contentId: getContent._id,elementType,elementData: data.keyName}).lean()
if(getContentElement){
ContentElement.findByIdAndUpdate(getContentElement._id, {
createdOn: Date(), modifiedOn: Date(),
}, { new: true })
}
else
{
return tempdata;
}else
{
tempdata=false;
return tempdata;
}
}).catch(err =>
{
console.error(err);
tempdata=false;
return tempdata;
});
}
}
catch(error){
console.log(error)
tempdata=false;
return tempdata;
}
}
但是没用...
我再次调用 imageCoverJimpAndUploadToS3small() 并在那之后开始。
根据文档 https://www.npmjs.com/package/jimp#writing-to-files-and-buffers,.write
异步运行并接受回调,这就是承诺在写入图像之前解析的原因
所以,你需要使用回调,并从那里解决:
im.write(filePath+FILE_NAME, (err)=>{
if(err) throw err;
resolve(true);
});
或者,如文档所述,您可以使用并等待 .writeAsync
,即 promise-based:
await im.writeAsync(filePath+FILE_NAME);
resolve(true);
我想在这里做的是在用节点调整大小后写一个图像文件,然后我将用它来上传它。但是当我写它的时候我的上传代码开始了,文件还没有写。
async function getdataFromJimpSmall(image,filePath,FILE_NAME){
try{
var isSucess = false ;
const im = await Jimp.read(image);
return new Promise((resolve, reject) => {
try{
im.resize(150, 215, Jimp.RESIZE_BEZIER, function(err){
if (err) throw err;
});
im.write(filePath+FILE_NAME)
resolve(true)
}
catch(err){
console.log(err);
reject(false);
}
})
}
catch(err){
console.log('getdataFromJimpSmall Err====>'+err)
return false
}
}
我尝试使用它,但它超出了我的代码 它从这里开始,从这里被调用。
isThumbnailUrlavailable = await jimpController.imageCoverJimpAndUploadToS3small(getISBNBook, "-@gmail.com", "SaleIsbn")
isThumbnailUrlavailableMedium = await jimpController.imageCoverJimpAndUploadToS3medium(getISBNBook, "-@gmail.com", "SaleIsbn")
第一个函数 imageCoverJimpAndUploadToS3small() 是这样的:
exports.imageCoverJimpAndUploadToS3small = async (getContent,email,file) =>{
try{
var elementType = 15;
var filePath = path.join(__dirname, '../../uploads/t/')
var FILE_NAME = `${getContent.contentMetaDataRef.isbn}_s.jpg`
var image = getContent.thumbnail
let tempdata = await getdataFromJimpSmall(image,filePath,FILE_NAME)
console.log('temp - ', tempdata);
if(tempdata==true)
{
var data = await commonController.uploadthumbnailTOPublicS3(filePath, FILE_NAME)
console.log('s3', data);
requestImageSize(data.url).then(size =>
{
console.log(size);
if(size.height>0&&size.width>0)
{
tempdata=true;
const getContentElement = ContentElement.findOne({contentId: getContent._id,elementType,elementData: data.keyName}).lean()
if(getContentElement){
ContentElement.findByIdAndUpdate(getContentElement._id, {
createdOn: Date(), modifiedOn: Date(),
}, { new: true })
}
else
{
return tempdata;
}else
{
tempdata=false;
return tempdata;
}
}).catch(err =>
{
console.error(err);
tempdata=false;
return tempdata;
});
}
}
catch(error){
console.log(error)
tempdata=false;
return tempdata;
}
}
但是没用...
我再次调用 imageCoverJimpAndUploadToS3small() 并在那之后开始。
根据文档 https://www.npmjs.com/package/jimp#writing-to-files-and-buffers,.write
异步运行并接受回调,这就是承诺在写入图像之前解析的原因
所以,你需要使用回调,并从那里解决:
im.write(filePath+FILE_NAME, (err)=>{
if(err) throw err;
resolve(true);
});
或者,如文档所述,您可以使用并等待 .writeAsync
,即 promise-based:
await im.writeAsync(filePath+FILE_NAME);
resolve(true);