0

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

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

上传单个文件(使用此处的代码)很容易,但HTML 规范提到,在上传多个文件时,您必须在 multipart/form-data 中嵌入一个 multipart/mixed 标头,以及要在其中上传的文件多部分/混合标题。

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

谢谢。

4

1 回答 1

2

编辑:

您上传的文件数据应使用 Base64 编码;您可以通过NSData+Base64做到这一点,然后使用:

[body appendData:[imageData1 base64EncodedString];

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

NSData* imageData = UIImagePNGRepresentation(image);

并且image是一个UIImage

旧答案:

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

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属性,它应该可以工作。

于 2012-07-02T15:54:20.057 回答