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 のみを使用してファイルを 1 つのチャンクで送信しようとしましたが、それでも 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];