2011-10-07 55 views
1

我與Appcelerator的SDK 1.6.2開發適用於iOS 4.3鈦Appcelerator的多文件上傳

我試圖將多個文件上傳到服務器,問題是文件的數量是動態的因此不能在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() 
}); 

但我不能肯定如何動態地獲得這種由於事實的數傳送的圖像可能會有所不同

建議會很好

回答

2

我有這個確切的問題,我最終使用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); 

下面是defineProperty mozilla的文檔:

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

你想使用POST參數XHR,所以xhr.open("POST", url);

第二關,嘗試在不同的對象索引的每個文件,例如:

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

搶到PHP,只是做$_FILE['file1'], $_FILE['file2'] ...等

+0

問題來自基於用戶的完全動態的圖像數量(和圖像本身)。我將如何動態設置索引? – joseym

+0

封裝它。就像[file1var] .imageFile.read() –

+0

對未來的讀者 - 我不得不使用'.toImage()'方法以及此工作 – elimirks

1

我也遇到了這個問題,目前明顯的答案不適合我。經過一些調試後,我找到了更好的解決方案。

首先設置參數(注意:如果您不需要額外的鍵/值,請留下{})。

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個晚年,但嘿,我也來到這裏^^。

+0

這是一個更好的答案:)當我寫我的我didn'我不知道動態設置對象屬性的語法,'obj [keyString] = val',所以我使用了longwinded的'Object.defineProperty',但它不太可讀 – Brad