iOS一次上传多个文件

时间:2012-07-02 15:30:05

标签: ios5 file-upload nsmutableurlrequest

是否可以仅在一个请求中上传两个(或更多)文件?

我一直在尝试使用NSMutableURLRequest和NSURLConnection这样做但到目前为止没有成功,我在网上找不到令人信服的答案。

上传单个文件很容易(使用here中的代码),但HTML Specs提到在上传多个文件时,您必须在multipart / form中嵌入multipart / mixed标头 - 数据,以及要在该多部分/混合标题中上传的文件。

上面链接的代码的问题是正在上传的一个文件将其Content-Disposition设置为“form-data”(我猜这意味着单个文件是表单数据的“全部”?)我认为留下“没有空间”附加另一个文件。如果我错了,请纠正我。

感谢。

1 个答案:

答案 0 :(得分:2)

编辑:

您要上传的文件数据应使用Base64进行编码;您可以通过NSData+Base64执行此操作,然后使用:

[body appendData:[imageData1 base64EncodedString];

发送文件数据,我假设imageData1被定义为:

NSData* imageData = UIImagePNGRepresentation(image);

imageUIImage

老答案:

这是来自HTML 4.0.1 standard(文档的最后)的示例:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=BbC04y

--BbC04y
Content-Disposition: file; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--BbC04y
Content-Disposition: file; filename="file2.gif"
Content-Type: image/gif
Content-Transfer-Encoding: binary

...contents of file2.gif...
--BbC04y--
--AaB03x--

请注意,这些文件一起列在多部分/混合列表中。

所以你可以尝试使用代码:

//-- new part in multipart/form-data
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"files\" dataUsingEncoding:NSUTF8StringEncoding]];

//-- new multipart/mixed
[body appendData:[[NSString stringWithFormat:@"multipart/mixed; boundary=%@", mixedBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: file; filename=\"%@\"\r\n", FileParamConstant1] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData1];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];


[body appendData:[[NSString stringWithFormat:@"--%@\r\n", mixedBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[[NSString stringWithFormat:@"Content-Disposition: file; filename=\"%@\"\r\n", FileParamConstant2] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData2];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

注意更改filenamename属性,它应该有效。