将数组而不是字符串传递给函数以上传文件的解决方案(node.js)

Solution for passing an array rather than a string to a function to upload files (node.js)

更新了原始问题以尝试简化上下文:

我想将数组中的值应用为数组中每个值的函数的第一个参数。

例如所以对于 arg1 在 foo:

foo(arg1, arg2, arg3) 

var myArray = [ 'image1.jpg', 'image2.jpg',  'image3.jpg' ]

将每个图像应用为第一个参数:

foo(image1.jpg, arg2, arg3) 

foo(image2.jpg, arg2, arg3) 

foo(image3.jpg, arg2, arg3) 

我在想 .apply 方法可能是执行此操作的一种方法,但无法使其发挥作用。是否需要 for 循环?

例如:

myFunction.apply(this, myArray)

myFunction = foo(this, arg2, arg3)

在上下文中:

var oneImageArray = ['lake.jpg', 'pizza.jpg'];

myFunction.apply(this, oneImageArray);

cloudinary.uploader.upload(
    this, {folder: "test/name", use_filename: true, unique_filename: false , tags: 'basic_sample'},function(err,image){
  console.log();
  if (err){ console.warn(err);}
  console.log("* "+image.public_id);
  console.log("* "+image.url);
  waitForAllUploads("test",err,image);
});

原题:

我想将一组文件传递给 cloudinary 的上传功能,这样我就可以上传一批图像(而不是一张可以正常工作的图像)。

The Cloudinary upload method performs an authenticated upload API call over HTTPS while sending the image file:

cloudinary.v2.uploader.upload(file, options, callback);

forum 它表明我可以

“migrate your existing images to Cloudinary, write a short script that traverses your images and upload them one-by-one using Cloudinary's upload API.”

所以我试图通过使用 fs-readdir-recursive 来获取指定文件夹中所有文件的数组来实现这一点。

当将单个图像指定为上传函数的第一个参数时,该过程有效。 我以为我可以创建一个变量来传递 fs-readdir 返回的数组,但出现以下错误

所以我想我的问题是为什么以下方法不起作用,是否有可行的替代解决方案来自动处理一批文件?

    var dotenv = require('dotenv');
dotenv.load();
var fs = require('fs');
var cloudinary = require('cloudinary').v2;
var uploads = {};

var read = require('fs-readdir-recursive');

var allMyImages = read("src/images");

cloudinary.config({
  cloud_name: 'myName',
  api_key: 'myKey',
  api_secret: 'mySecret'
});

cloudinary.uploader.upload(
    allMyImages, {folder: "test/name", use_filename: true, unique_filename: false , tags: 'basic_sample'},function(err,image){
  console.log();
  if (err){ console.warn(err);}
  console.log("* "+image.public_id);
  console.log("* "+image.url);
  waitForAllUploads("test",err,image);
});

 function waitForAllUploads(id,err,image){
   uploads[id] = image;
   var ids = Object.keys(uploads);
   if (ids.length==6){
     console.log();
     console.log ('**  uploaded all files ('+ids.join(',')+') to cloudinary');
     performTransformations();
   }
 }

如文档中所述,您可以一张一张地上传图片。 图像数组上的简单 for 循环应该可以工作。

for(var i = 0; i < allMyImages.length;i++){
   cloudinary.v2.uploader.upload(allMyImages[i], options, callback);
 }

祝你好运!