从本地FS上载到Azure

时间:2018-09-26 07:02:52

标签: javascript azure cloud

我在不同的目录中都有大量的图片需要上传,并跟踪它们所在的文件夹名称。现在我尝试使用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文件中。

0 个答案:

没有答案