ios中的多部分表单上传,它是如何完成的?

Posted

技术标签:

【中文标题】ios中的多部分表单上传,它是如何完成的?【英文标题】:Multipart form upload in ios, How is it done? 【发布时间】:2016-04-25 09:03:50 【问题描述】:

我必须从 iPhone 库中选择图像或视频并将这些选择的图像和视频上传到服务器。我查找了多部分表单上传,但无法获得必要的信息。

我有以下 JSON 结构要发布。

"uuid":"a6059eb6-2417-4575-8f83-e5eca065a1bb","id":901,"username":"somename","description":"Some Desciption","date":"Some date","title":"Some Title","published":1,"type":"Some Type","responsible":["Person 1","Person 2","Person 3"],"products_List":["Product 1"],"assets":["uuid":"e1102eae-987a-4930-96ad-5ae331d785bc","fileExtension":"jpg","mimeType":"image\/jpeg","type":"image","uuid":"c61bcc45-5347-4e98-9990-bc949dad24fa","fileExtension":"mp4","mimeType":"video\/mp4","type":"video"]

【问题讨论】:

【参考方案1】:

试试这段代码,

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
self.client = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];

NSString *tempFileString = [NSTemporaryDirectory() stringByAppendingPathComponent:@"your-app-temp"];
NSURL *filePathtemp = [NSURL fileURLWithPath:tempFileString];

NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://domain/path" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
     [formData appendPartWithFileData:imageData name:@"imageData" fileName:@"temp.jpeg" mimeType:@"image/jpeg"];
 error:nil];

[[AFJSONRequestSerializer  serializer] requestWithMultipartFormRequest:request writingStreamContentsToFile:filePathtemp completionHandler:^(NSError *error) 
    NSURLSessionUploadTask *uploadTask = [self.client uploadTaskWithRequest:request fromFile:filePathtemp progress:nil completionHandler:completionHandler];
    [uploadTask resume];
];

【讨论】:

什么是文件名和名称?由于我从 iPhone 中的图像库中选择图像,我们如何获取文件名。 你必须编写文件名的逻辑。像随机没有或带有名称的日期时间。【参考方案2】:

您必须使用 AFNetworing 将图像作为多部分数据单独上传。像这样:-

- (AFHTTPRequestOperation*)POSTAction:(APIRestAction)task
            constructingBodyWithBlock:(void (^)(id<AFMultipartFormData> formData))block
                              success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success
                              failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;

这里 :- 在 APIRestAction 中设置你的服务器路径。

【讨论】:

以上是关于ios中的多部分表单上传,它是如何完成的?的主要内容,如果未能解决你的问题,请参考以下文章

Servlet从tomcat 7中的多部分表单获取参数[重复]

使用 Alamofire 和 BOX API 的多部分表单上传

警告:第 0 行未知中的多部分/表单数据 POST 数据中缺少边界

CREATE 上 DRF 中的多部分图像上传

AngularJS:如何使用多部分表单实现简单的文件上传?

使用 Undertow 的多部分表单数据示例