1

我正在尝试从 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];
4

0 回答 0