我在不同的目录中都有大量的图片需要上传,并跟踪它们所在的文件夹名称。现在我尝试使用NodeJS这样做,但是在上传部分失败。 做这项任务的最佳方法是什么? (在MacOS上运行)
const imageDir = '/Users/ad/Pictures/Migrtion/ab02';
const getImages = async(imageDir, callback) => {
let fileType = '.jpg';
let files = [];
let i;
const url = 'http://localhost:3000/api/images/test';
fs.readdir(imageDir, async(err, list) => {
for (i = 0; i < list.length; i++) {
if (path.extname(list[i]) === fileType) {
//
files.push(list[i]);
// First I want to read the file
fs.readFile(imageDir + '/' + list[i], async
function read(err, data) {
if (err) {
throw err;
}
const image = await axios.post(url, data);
console.log(image)
});
}
}
callback(err, files);
});
};
router.post('/test', async(req, res) => {
try {
upload(req, res, async(err) => {
if (err) {
return res.status(400).json({
message: 'Image upload ' + err
});
}
const query = {
filename: isCloudUpload ? req.file.blobName : req.file.filename,
type: req.file.mimetype,
path: isCloudUpload ? req.file.url : req.file.path,
size: req.file.size,
etag: isCloudUpload ? req.file.etag : 'LOCAL'
};
return res.status(200).json({
message: query
});
});
} catch (ex) {
return res.status(500).json({
message: 'Exception:' + ex
});
}
});
const upload({
storage: new MulterAzureStorage({
azureStorageConnectionString: keyAzure,
containerName: 'uploads',
containerSecurity: 'blob'
}),
fileFilter: filterSettings,
limits: {
fileSize: 1024 * 1024 * process.env.UPLOAD_MAX_MB,
},
}).single(imageFileName);
在这种情况下,使用Multer和MulterAzure libs为我完成繁重的工作。也可以使用JS,但只要可以完成任务,其他任何语言都可以,我想要脚本执行的原因是我想将每个返回的URL记录到CSV文件中。