NSURLConnection http PUT 与 HTTP_RANGE 不起作用
我正在尝试从 iphone 将图像分块上传到服务器,我在服务器端有 PHP 代码,它读取数据并使用 HTTP_RANGE 附加到现有图像。
注意:服务器端代码已经过测试,并且使用浏览器中的 html 运行良好。
我的服务器端代码仅将 POST 作为 httpMethod,因此我必须在帖子正文中给出restMethod = PUT 和 HTTP_RANGE,如下所示:-
[bodyData appendData:[[NSString stringWithFormat:@"\r\n\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"restMethod\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"PUT"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"HTTP_RANGE\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"%d-0",offset] dataUsingEncoding:NSUTF8StringEncoding]];
上传的图像为 0KB。我还尝试仅使用restMethod = PUT和HTTP_RANGE=0-0以一大块发送文件,它仍然是0KB,但如果我只执行restMethod = PUT并省略HTTP_RANGE,则图像上传成功。
我真的很困惑这里,请帮忙!!
编辑::添加实际的HTTP请求:-
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",
kHttpPostMimeBoundary];
[req addValue:contentType forHTTPHeaderField:@"Content-Type"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[req setHTTPMethod:@"POST"];
NSMutableData *bodyData = [NSMutableData data];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"restMethod\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"PUT"] dataUsingEncoding:NSUTF8StringEncoding]];
if (offset > 0) {
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"HTTP_RANGE\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"%d-0",offset] dataUsingEncoding:NSUTF8StringEncoding]];
}
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n",mimeType]
dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:fileData];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",kHttpPostMimeBoundary]
dataUsingEncoding:NSUTF8StringEncoding]];
NSString *msgLength = [NSString stringWithFormat:@"%d", [bodyData length]];
[headerParamDict setValue:msgLength forKey:@"Content-Length"];
[req setHTTPBody: bodyData];
I am trying to upload an image in chunks to the server from iphone, I have PHP code on the server side which reads the data and appends using HTTP_RANGE to an existing image.
Note : server side code is tested and running fine using html from browser.
My server side code only take POST as httpMethod, so I have to give restMethod = PUT and HTTP_RANGE in the body of the post, like this :-
[bodyData appendData:[[NSString stringWithFormat:@"\r\n\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"restMethod\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"PUT"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"HTTP_RANGE\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"%d-0",offset] dataUsingEncoding:NSUTF8StringEncoding]];
The uploaded image is 0KB. I have also tried sending the file in one chunk only with restMethod = PUT and HTTP_RANGE=0-0, it still is 0KB, but if I only do restMethod = PUT and omit out HTTP_RANGE the image is uploaded successfully.
I am really stumped here, please help !!
EDIT :: Adding the actual HTTP Request :-
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",
kHttpPostMimeBoundary];
[req addValue:contentType forHTTPHeaderField:@"Content-Type"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[req setHTTPMethod:@"POST"];
NSMutableData *bodyData = [NSMutableData data];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"restMethod\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"PUT"] dataUsingEncoding:NSUTF8StringEncoding]];
if (offset > 0) {
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"HTTP_RANGE\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"%d-0",offset] dataUsingEncoding:NSUTF8StringEncoding]];
}
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", kHttpPostMimeBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n",mimeType]
dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:fileData];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",kHttpPostMimeBoundary]
dataUsingEncoding:NSUTF8StringEncoding]];
NSString *msgLength = [NSString stringWithFormat:@"%d", [bodyData length]];
[headerParamDict setValue:msgLength forKey:@"Content-Length"];
[req setHTTPBody: bodyData];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论