我使用npm papercut https://www.npmjs.com/package/papercut进行图片上传,这是保存图像的功能(效果很好)。
uploader.process('image1', file.path, function(images){
console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
console.log(images.small); // '/images/uploads/image1-small.jpg'
})
我正在使用文件系统模块方法fs.stat
,我想创建一个目录,我希望uploader.process
在fs.stat
回调中运行。因此,保存的图像会进入fs.stat
创建的目录。这是我到目前为止的代码,我不知道在哪里放置uploader.process
函数,所以回调调用它。
fs.stat(`${tenantId}/`, function (err, stats){
if (err) {
// Directory doesn't exist or something.
console.log('Folder doesn\'t exist, so I made the folder ' + `${tenantId}/`);
return fs.mkdir(`assets/${tenantId}`, callback);
}
uploader.process('image1', file.path, function(images){
console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
console.log(images.small); // '/images/uploads/image1-small.jpg'
})
});
答案 0 :(得分:1)
您有两种选择,让您的呼叫同步。或者使用承诺。 (也许你有其他选择,但我希望这会有所帮助)。
// Synchronous way
// Check for node docs: https://nodejs.org/api/fs.html#fs_fs_statsync_path
const stats = fs.statSync(`${tenantId}/`);
// Check for stats class def: https://nodejs.org/api/fs.html#fs_class_fs_stats
if (!stats.isDirectory()) {
// Node docs: https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode
fs.mkdirSync(`assets/${tenantId}`);
}
uploader.process('image1', file.path, function(images){
console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
console.log(images.small); // '/images/uploads/image1-small.jpg'
});
// Async way
fs.stat(`${tenantId}/`, (err, stats) => {
const localPromise = new Promise((resolve, reject) => {
if (err) {
fs.mkdir(`assets/${tenantId}`, () => { resolve(true) });
}
resolve(true);
});
localPromise.then(result => {
uploader.process('image1', file.path, function(images){
console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
console.log(images.small); // '/images/uploads/image1-small.jpg'
});
});
});
检查文档,可能你应该在两种情况下尝试/捕获mkdir async / sync。