NSURLCподключение http PUT с HTTP_RANGE не работает - PullRequest
1 голос
/ 07 января 2011

Я пытаюсь загрузить изображение кусками на сервер с 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]];  

Загруженное изображение размером 0 КБ. Я также попытался отправить файл только одним фрагментом с restMethod = PUT и HTTP_RANGE = 0-0, он по-прежнему равен 0 КБ, но если я только делаю restMethod = PUT и опускаю HTTP_RANGE, изображение успешно загружено.

Я действительно в тупике, пожалуйста, помогите !!

EDIT :: Добавление фактического 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];
...