文件上傳在開(kāi)發(fā)中很常見(jiàn)绪穆,比如上傳頭像林说。蘋果原生API里提供的NSURLSessionUploadTask可供我們實(shí)現(xiàn)文件上傳恕出。實(shí)現(xiàn)代碼如下:
上傳成功的控制臺(tái)打印:
上傳的data拼接格式固定,下面單獨(dú)貼出來(lái):
-(NSData *)bodyData
{
NSMutableData *data = [NSMutableData data];
//01 拼接文件參數(shù)
/*
--分隔符
Content-Disposition: form-data; name="file"; filename="Snip20161126_210.png"
Content-Type: image/png
空行
文件數(shù)據(jù)
*/
[data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:KnewLine];
//name:file 服務(wù)器規(guī)定
//filename:該文件上傳到服務(wù)器之后的名稱
//username|pwd
[data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"bbbcccxxx.png\"" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:KnewLine];
//要上傳文件的二進(jìn)制數(shù)據(jù)類型? MIMEType 組成:大類型/小類型
[data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:KnewLine];
[data appendData:KnewLine];
NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/xyf/Desktop/a.png"];
[data appendData:imageData];
[data appendData:KnewLine];
//02 拼接非文件參數(shù)
/*
--分隔符
Content-Disposition: form-data; name="username"
空行
abcdf
*/
[data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:KnewLine];
//name:username
[data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:KnewLine];
[data appendData:KnewLine];
[data appendData:[@"abcdef" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:KnewLine];
//03 結(jié)尾標(biāo)識(shí)
/*
--分隔符--
*/
[data appendData:[[NSString stringWithFormat:@"--%@--",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
return data;
}