iOS表單上傳附件及引數到伺服器
Content-Type = multipart/form-data;
該種類型有固定的引數拼接格式
普通引數
--boundry\r\n
Content-Disposition: form-data; name=\"%@\"\r\n
\r\n
value
\r\n
檔案引數--boundry\r\n
Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\r\nContent-Type: %@\r\n
\r\n
data
\r\n
引數結尾
--boundry--\r\n
其中
name 即為表單請求欄位(服務端要的引數欄位),fileName為儲存在服務端的檔名字,Content-Type為檔案型別(image/png 或者
這裡著重說下即使服務端要引數是int型別,這裡也必須普通引數也必須是字串物件
#define TEST_FORM_BOUNDARY @"test1234"
#define BMEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
-(void)sendPost:(NSString*)urlStr Paramater:(NSDictionary*)para data:(NSData*)data name:(NSString*)fileName andContentType:(
{
NSMutableData *dataM = [NSMutableDatadata];
/* 普通引數*/
[para enumerateKeysAndObjectsUsingBlock:^(id_Nonnull key, id_Nonnull obj, BOOL *_Nonnull stop) {
NSString *boundry = [NSStringstringWithFormat:@"--%@\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BMEncode(boundry)];
NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",key];
NSLog(@"%@",disposition);
[dataM appendData:BMEncode(disposition)];
[dataM appendData:BMEncode(@"\r\n")];
[dataM appendData:BMEncode(obj)];
[dataM appendData:BMEncode(@"\r\n")];
}];
/* 普通引數*/
/* 檔案引數*/
if(data&&data.length>0)
{
NSString *boundry = [NSStringstringWithFormat:@"--%@\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BMEncode(boundry)];
NSString *disposition=[NSStringstringWithFormat:@"Content-Disposition:form-data; name=\"uploadfile\"; filename=\"%@\"\r\nContent-Type: %@\r\n\r\n",fileName,cotentype];
NSLog(@"%@",disposition);
[dataM appendData:BMEncode(disposition)];
[dataM appendData:data];
[dataM appendData:BMEncode(@"\r\n")];
}
/* 檔案引數*/
//尾部的分隔符
NSString *strBottom = [NSStringstringWithFormat:@"--%@--\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BMEncode(strBottom)];
NSURL *url = [NSURLURLWithString:urlStr];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc]initWithURL:url];
[request setValue:@"ZYB"forHTTPHeaderField:@"User-Agent"];
[request setValue:@"max-age=7200"forHTTPHeaderField:@"Cache-Control"];
//設定上傳資料的長度及格式
[request setValue:[NSStringstringWithFormat:@"multipart/form-data; boundary=%@",TEST_FORM_BOUNDARY]forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSStringstringWithFormat:@"%lu",(unsignedlong)dataM.length]forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:dataM];
//建立會話
NSURLSession *session = [NSURLSessionsharedSession];
NSURLSessionUploadTask *updataTask = [sessionuploadTaskWithRequest:requestfromData:dataM completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError * _Nullable error) {
if (!error) {
NSLog(@"response:%@",response);
NSString *dataStr = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"dataStr:%@",dataStr);
}else{
NSLog(@"error:%@",error);
}
}];
[updataTask resume];
}