Titanium Appcelerator Загрузка нескольких файлов - PullRequest
2 голосов
/ 07 октября 2011

Я разрабатываю с помощью Appcelerator SDK 1.6.2 для iOS 4.3

Я пытаюсь загрузить несколько файлов на сервер, проблема в том, что количество файлов является динамическим и, следовательно, не может быть задано в параметрах отправки 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
});

Я нашел эту статью: http://developer.appcelerator.com/question/123794/multiple-file-upload-in-one-request

предполагает, что должен работать следующий код:

 xhr.send({      
     'media[]': imageFile.read(),
     'media[]': imageFile2.read()
 });

однако я не уверен, как получить это динамически из-за того, что количество передаваемых изображений может варьироваться

Предложения будут отличными

Ответы [ 3 ]

2 голосов
/ 26 сентября 2013

У меня была именно эта проблема, и я в итоге использовал метод 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);

Вот документация mozilla для defineProperty:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FObject%2FdefineProperty#Adding_properties_and_default_values

1 голос
/ 04 ноября 2016

Я также столкнулся с этой проблемой, и текущий помеченный ответ не работал для меня. После некоторой отладки я нашел лучшее решение.

Сначала установите параметры (Примечание: оставьте {}, если вам не нужны дополнительные ключи / значения).

var parameters = {'extraKey': 'extraValue'};

После этого просматривайте ваши файлы и добавляйте их в параметры.

for(var i in files) parameters['files[' + i +']'] = files[i];

Ваши параметры будут выглядеть после цикла:

{'extraKey':'extraValue', 'file[0]': files[0], 'file[1]': files[1] }

Теперь вы можете отправить их как xhr.send(parameters);

Уже 5 лет, но эй, я тоже попал сюда ^^.

1 голос
/ 31 октября 2011

Вы хотите использовать xhr в параметре POST, поэтому xhr.open("POST", url);

Во-вторых, попробуйте каждый файл с другим индексом объекта, например:

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

Чтобы получить в PHPпросто сделай $_FILE['file1'], $_FILE['file2'] ... и т. д.

...