iOS分享,ios分享功能
在分享經驗之前,先說點題外話,之前的一個項目涉及到了多圖片的上傳,本來以為是一個很簡單的事情,卻著實困擾了我好久,究其原因,一是我不夠細心,二是與後台人員的交流不夠充分。在此,我想將我的老師常說的一句話送給大家:“做一個細心的男人(女人)”。好了,閑話少說,進入正題。
AFNetworking是我們在日常開發中,常用於發送網路請求的第三方類庫。其中,我們經常用到的方法有兩類,一是普通的網路請求,其常用方法為:
//GET請求- (AFHTTPRequestOperation *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure//POST請求- (AFHTTPRequestOperation *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
對此,我不多說,相信大家都會,第二類就是我要重點說的上傳檔案的網路請求,跟普通的網路要求方法十分相似:
- (AFHTTPRequestOperation *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
這個方法中多了一個block匿名函數,它會在網路請求發送之前調用,我們要添加所需上傳圖片的資料,就要在這裡進行,如:
//設定網路要求管理者 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //發送網路請求 [manager POST:url parameters:paramsDic constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { for (int i = 0; i < self.imageArr.count; i++) { UIImage *image = self.imagArr[i]; NSData *data = UIImagePNGRepresentation(image); [formData appendPartWithFileData:data name:[NSString stringWithFormat:@"photos[%d]",i] fileName:[NSString stringWithFormat:@"image%d.png",i] mimeType:@"image/png"]; } } success:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }];
注意:
1、name:多檔案上傳時,name不能重複,不能重複,不能重複,重要的事情說三遍,我就是在這裡卡住了,當時我的介面文檔中讓我傳的參數是“photos[]”,結果我真的傻乎乎的只傳了一個“photos[]”,其結果就是只有一張圖片上傳成功,這也體現了交流的重要性,至於具體怎麼傳,介面文檔一般都有說明,如不清楚,請與後台人員溝通,這是伺服器用於接收你所上傳檔案的參數名,十分重要。
2、fileName:不能重複,這個名字由使用者決定,只要不重複,其它沒有要求。
3、mimeType:你所要上傳檔案的類型,各種檔案所對應的類型詳情請自己百度。
上傳圖片一般會與相簿與照相機結合使用,但是其圖片一般較大,可使用UIImageJPEGRepresentation(image, 0.1)方法對圖片進行一定程度的壓縮,具體壓縮情況要結合你的執行個體。作一點說明:UIImagePNGRepresentation(image)與UIImageJPEGRepresentation(image, 0.1)方法都會返回圖片的data資料,如果將data資料轉化成圖片,圖片類型由尾碼名決定,如果儲存為.png尾碼的圖片,就是png圖片,如果儲存為.jpg尾碼的圖片,則就是jpg圖片,故不要被方法名中的PNG和JPEG所影響。
最後,提醒一下大家:有時候你可能碰到上傳圖片的網路請求失敗,從而會懷疑自己是不是用錯了方法,如果你的檔案上傳是利用multipart/form-data請求上傳,則使用上述方法是沒有錯的,這時你需要與你的後台成員多進行溝通,因為錯的並不一定是你,自信一點。