2012-08-26 67 views
3

我使用AFnetworking爲我的iPhone項目,我是一個初學者在Objective C.IOS倍數文件上傳與AFNetworking

我知道如何使用塊上傳倍數文件,描述在這裏: How do you upload multiple files with AFNetworking

所以成塊,因爲我們希望我們可以添加儘可能多的FORMDATA元素。

但在我的情況,我不知道有多少照片,我都會有,因爲用戶可以自由選擇很多。圖片的數據存儲在一個數組中。

所以,我想類似的東西成塊,但只有最後一個元素被上傳:

for(NSDictionary *dict in imagesInfo) { 

     UIImage *theFile = [dict objectForKey:UIImagePickerControllerOriginalImage]; 
     NSData *imageData = UIImageJPEGRepresentation(theFile, 0.5); 
    [formData appendPartWithFileData:imageData name:@"name" fileName:@"name.jpg" mimeType:@"image/jpeg"]; 

} 

不管怎樣,我能得到它時,第一個完成發射另一個請求工作。 但我想有一個最好的方式來得到它的工作?

坦克很多,

魯道夫

+0

您是否嘗試過改變每個附件的名稱和文件名? –

回答

0

嘗試ASIHTTPRequest庫。使用這個庫,你可以下載/一個同時或上傳多個文件:http://allseeing-i.com/ASIHTTPRequest/How-to-use

+2

我看這是「如果你不知道如何與現代圖書館做到這一點,則應該弄清楚如何與被廢棄的一個做到這一點。」這是可怕的建議。 –

+1

許多人仍然在他們的項目中使用這個「不贊成」的圖書館。它適用於現在所有版本的iOS。 – Tutankhamen

+4

就這樣,問題表明他們已經在使用圖書館,並想知道如何使用它。再次告訴他們如何用**不同的**和不支持的庫來做到這一點是沒有用的。 –

3

AFNetworking有一些很好的工具,用於管理請求的「批次」。有3種方法尤其是你應該從AFHTTPClient類考慮:

enqueueBatchOfHTTPRequestOperationsWithRequests //用於批次 enqueueBatchOfHTTPRequestOperations //用於批次 enqueueHTTPRequestOperation //用於單個請求

基本上,你會遍歷您的照片陣列並建立一個新的NSMutableURLRequest(s)(幾乎和你現在可能做的一樣)。對於每張照片,創建NSMutuableURLRequest或HTTPRequestOperation並將其彈出到數組中。使用上述方法之一將新的HTTP URL請求數組傳遞給AFNetworking。

如果你要管理的上傳過程的批量使用的配料方法之一。如果你只是想開火併忘記,使用enqueueHTTPRequestOperation,它仍然給你所有的AFNetworking幸福。

它看起來是這樣的:

AFHTTPClient *photoUploader = [[AFHTTPClient alloc] init]; 
[photoUploader enqueueBatchOfHTTPRequestOperationsWithRequests:self.photosWrappedInNSURLS progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) { 

    //block gets called after each succesful operation 
    //useful for messages like 1 of 3 complete 

} completionBlock:^(NSArray *operations) { 

    //block gets called after all requests are complete 
}]; 

如果你讀一下文件的,他們會建議你做你自己AFHTTPClient的子類,並建立它作爲一個單例。您不必以這種方式使用它,但如果您有多種類型的連接返回到相同的主機或服務,則非常方便。我發現它在我上一個項目中非常有用,並且取得了非常好的成功。

希望幫助 很好

+0

謝謝,我會看看! – user1625861

0

你應該爲每個文件指定一個不同的名稱。我懷疑這會解決它。