經(jīng)過一天的蒸騰挪捕,我決定寫幾句話抒發(fā)一下我此時此時用了一天的時間才解決的小bug罚缕。
首先我自己覺的出現(xiàn)這個問題割粮,還是自己了解的太少剿干,其次是后臺人員的原因。
言歸正傳穆刻。我們的需求是上傳圖片同時添加介紹文字置尔。就這么一個簡單的需求。最開始使用AFN上傳氢伟,沒有后臺配合榜轿,放棄了,如果當時使用AFN可能也不會有這個問題朵锣,又差點跑題谬盐。我使用的是原生post上傳圖片和文字信息。android是使用的框架诚些,唉飞傀。。诬烹。砸烦。后臺使用的是DiskFileItemFactory這個框架。我也是第一次遇到這個問題很多不懂绞吁,據(jù)同學說這里需要和后臺一起協(xié)定post上傳的頭部Content-Type幢痘。我們后臺也不知道的,比我還小清新家破。post上傳代碼如下颜说,我自己也是參考網(wǎng)絡(luò)大牛寫的,
// 多張照片上傳
-?(void)upLoadImageWithTID:(NSString?*)user_id?andMsg:(NSString?*)msg?andURL:(NSString?*)urlStr?andImageArray:(NSArray?*)imageArray?{
//記錄Image的類型和data
NSString?*imageFormat?=?@"Content-Type:?image/png?\r\n";
NSMutableData?*imageArrayData?=?[NSMutableData?data];
NSMutableArray?*imageDataArr?=?[[NSMutableArray?alloc]init];
for?(int?i?=?0;?i?<?imageArray.count;?i?++)?{
NSData?*imageData?=?UIImagePNGRepresentation(imageArray[i]);
[imageArrayData?appendData:imageData];
[imageDataArr?addObject:imageData];
}
//?設(shè)置請求體
NSMutableData?*body?=?[NSMutableData?data];
/**文件參數(shù)**/
for?(int?i?=?0;?i?<?imageArray.count;?i?++)?{
[body?appendData:kLSEncode(@"--LS\r\n")];
//這里注明服務(wù)器接受圖片的參數(shù)(服務(wù)器指定參數(shù)名稱)及服務(wù)器上保存圖片的文件名
NSString?*disposition?=?[NSString?stringWithFormat:@"Content-Disposition:?form-data;?name=\"File%d\";?filename=\"image%d.png\"\r\n",?i+1,?i+1]?;
[body?appendData:kLSEncode(disposition)];
[body?appendData:kLSEncode(imageFormat)];
[body?appendData:kLSEncode(@"\r\n")];
NSData?*da?=?imageDataArr[i];
[body?appendData:da];
[body?appendData:kLSEncode(@"\r\n")];
}
/**普通參數(shù)**/
[body?appendData:kLSEncode(@"--LS\r\n")];
NSString?*dispositions?=?@"Content-Disposition:?form-data;?name=\"T_id\"\r\n";
[body?appendData:kLSEncode(dispositions)];
[body?appendData:kLSEncode(@"\r\n")];
[body?appendData:kLSEncode(user_id)];?//?user_id?的值
[body?appendData:kLSEncode(@"\r\n")];
[body?appendData:kLSEncode(@"--LS\r\n")];
NSString?*dispositionss?=?@"Content-Disposition:?form-data;?name=\"msg\"\r\n";
[body?appendData:kLSEncode(dispositionss)];
[body?appendData:kLSEncode(@"\r\n")];
[body?appendData:kLSEncode(msg)];?//?msg?的值
[body?appendData:kLSEncode(@"\r\n")];
/**參數(shù)結(jié)束**/
[body?appendData:kLSEncode(@"--LS--\r\n")];
//?請求地址
NSURL?*url?=?[NSURL?URLWithString:urlStr];
NSMutableURLRequest?*request?=?[NSMutableURLRequest?requestWithURL:url];
request.HTTPMethod?=?@"POST";
request.HTTPBody?=?body;
//設(shè)置請求長度
NSInteger?length?=?[body?length];
[request?setValue:[NSString?stringWithFormat:@"%ld",?(long)length]?forHTTPHeaderField:@"Content-Length"];
//?設(shè)置POST請求文件上傳
[request?setValue:@"multipart/form-data;?boundary=LS;"?forHTTPHeaderField:@"Content-Type"];
//????NSDictionary?*headers?=?@{@"Accept":?@"text/html",
//??????????????????????????????@"Content-Type":?@"multipart/form-data;?boundary=LS;charset=utf-8;",
//??????????????????????????????@"Cache-Control":?@"no-cache",
//??????????????????????????????@"Content-Length":[NSString?stringWithFormat:@"%ld",?(long)length]};
//????[request?setAllHTTPHeaderFields:headers];
[NSURLConnection?sendAsynchronousRequest:request?queue:[NSOperationQueue?mainQueue]?completionHandler:^(NSURLResponse?*?_Nullable?response,?NSData?*?_Nullable?data,?NSError?*?_Nullable?connectionError)?{
NSDictionary?*dic?=?[NSJSONSerialization?JSONObjectWithData:data?options:NSJSONReadingMutableLeaves?error:nil];
NSLog(@"-------========-------%@",?dic);
if?(!dic)?{
[self.hud?removeFromSuperview];
UIAlertView*?alert?=?[[UIAlertView?alloc]?initWithTitle:@"提示"?message:@"提交失敗."?delegate:nil?cancelButtonTitle:@"確定"?otherButtonTitles:nil,?nil];
[alert?show];
}
if?([dic[@"ResultCode"]?isEqual:@200])?{
[self.hud?removeFromSuperview];
UIAlertView*?alert?=?[[UIAlertView?alloc]?initWithTitle:@"提示"?message:@"提交成功."?delegate:nil?cancelButtonTitle:@"確定"?otherButtonTitles:nil,?nil];
[alert?show];
_isFirst?=?NO;
}?else?if([dic[@"ResultCode"]?isEqual:@500])?{
[self.hud?removeFromSuperview];
UIAlertView*?alert?=?[[UIAlertView?alloc]?initWithTitle:@"提示"?message:@"提交失敗."?delegate:nil?cancelButtonTitle:@"確定"?otherButtonTitles:nil,?nil];
[alert?show];
}
}];
}
后臺沒有寫Content-Type我這里也沒有汰聋, ?后臺說他的代碼是copy來的门粪。不知道改寫啥。真是的
亂碼就在傳字符串到后臺時是亂碼烹困。簡短點說吧還在上班玄妈,之前后臺得到我傳的字符串直接用的getString()方法,我改成。 new String(item.getString().getBytes("ios-8859-1"), "utf-8")措近。解決了。
此時我就懷疑了我傳的時候明明是utf-8編碼女淑,后臺為啥還要從ios-8859-1編碼格式轉(zhuǎn)到utf-8編碼瞭郑。難道iOS后臺傳送數(shù)據(jù)是ios-8859-1編碼的?鸭你?屈张?,希望大神們批評指正袱巨。