File upload 钛Appcelerator多文件上传

File upload 钛Appcelerator多文件上传,file-upload,appcelerator-mobile,titanium-mobile,File Upload,Appcelerator Mobile,Titanium Mobile,我正在为iOS 4.3开发Appcelerator SDK 1.6.2 我正在尝试将多个文件上载到服务器,问题是文件的数量是动态的,因此无法在XHR发送的参数中预先确定 如果我通过一个文件,它的工作很好,但我似乎不知道如何通过在许多 我尝试创建一个数组来容纳媒体元素,但没有骰子 var media = []; for(var i = 0; i < sync.images.length; i++){ media[i] = Titanium.Filesystem.getFile(sy

我正在为iOS 4.3开发Appcelerator SDK 1.6.2

我正在尝试将多个文件上载到服务器,问题是文件的数量是动态的,因此无法在XHR发送的参数中预先确定

如果我通过一个文件,它的工作很好,但我似乎不知道如何通过在许多

我尝试创建一个数组来容纳媒体元素,但没有骰子

var media = [];
for(var i = 0; i < sync.images.length; i++){
     media[i] = Titanium.Filesystem.getFile(sync.images[i].path).read();
}

xhr.send({
    media: media // no workie
//  media: media[1] workie
});
然而,我不确定如何动态地获得这一点,因为传输的图像数量可能会有所不同


建议将非常好

您希望在POST参数中使用xhr,因此
xhr.open(“POST”,url)

第二步,在不同的对象索引中尝试每个文件,例如:

{
   file1: imageFile.read(),
   file2: imageFile2.read()
}

要在PHP中抓取,只需执行
$\u文件['file1'],$\u文件['file2']
。。。等等。

我遇到了这个确切的问题,我最终使用了Object.defineProperty方法。下面是修改代码的方法:

将介质更改为对象而不是数组,然后迭代定义属性:

var media = {};

for(var i = 0; i < sync.images.length; i++){
    data_blob = Titanium.Filesystem.getFile(sync.images[i].path).read();
    data_key = 'image'+i;
    Object.defineProperty(media, data_key, {value: data_blob, enumerable: true});
}

xhr.send(media);
var media={};
对于(var i=0;i
以下是mozilla defineProperty文档:


我也遇到了这个问题,当前标记的答案对我不起作用。经过一些调试,我找到了一个更好的解决方案

首先设置参数(注意:如果不需要额外的键/值,请保留{})

之后,循环浏览文件并将其添加到参数中

for(var i in files) parameters['files[' + i +']'] = files[i];
循环后,您的参数将如下所示:

{'extraKey':'extraValue', 'file[0]': files[0], 'file[1]': files[1] }
现在您可以像
xhr.send(参数)那样发送它们


虽然已经晚了5年,但我还是来到了这里^。

问题在于图像(以及图像本身)的数量完全是基于用户的动态变化的。如何动态设置索引?对于未来的读者——我必须使用“.toImage()”方法才能实现这一点这是一个更好的答案:)当我写我的方法时,我不知道动态设置对象属性的语法,
obj[keyString]=val
,所以我使用了冗长的
对象。defineProperty
,但它的可读性要差得多
for(var i in files) parameters['files[' + i +']'] = files[i];
{'extraKey':'extraValue', 'file[0]': files[0], 'file[1]': files[1] }