是否可以仅在一个请求中上传两个(或更多)文件?
我一直在尝试使用NSMutableURLRequest和NSURLConnection这样做但到目前为止没有成功,我在网上找不到令人信服的答案。
上传单个文件很容易(使用here中的代码),但HTML Specs提到在上传多个文件时,您必须在multipart / form中嵌入multipart / mixed标头 - 数据,以及要在该多部分/混合标题中上传的文件。
上面链接的代码的问题是正在上传的一个文件将其Content-Disposition设置为“form-data”(我猜这意味着单个文件是表单数据的“全部”?)我认为留下“没有空间”附加另一个文件。如果我错了,请纠正我。
感谢。
答案 0 :(得分:2)
编辑:
您要上传的文件数据应使用Base64进行编码;您可以通过NSData+Base64执行此操作,然后使用:
[body appendData:[imageData1 base64EncodedString];
发送文件数据,我假设imageData1
被定义为:
NSData* imageData = UIImagePNGRepresentation(image);
和image
是UIImage
。
老答案:
这是来自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]];
注意更改filename
和name
属性,它应该有效。