将数组而不是字符串传递给函数以上传文件的解决方案(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);
}
祝你好运!
更新了原始问题以尝试简化上下文:
我想将数组中的值应用为数组中每个值的函数的第一个参数。
例如所以对于 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);
}
祝你好运!