これをiOSシミュレーターで実行すると完全に機能するこのコードを用意してください。デバイスでこれを実行すると、MVC3 コントローラーでファイル数がゼロになります。
これが私のObjective Cコードです
// create request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:YES];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"WebKitFormBoundaryAFokZJl5GNWFRG28";
// set Content-Type in HTTP header
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"patid\"\r\n\r\n %@", _patID] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"apicall\"\r\n\r\n %@", @"yes"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// add image data
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%d", [body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
NSMutableString *sURL;
sURL = _postURL;
NSURL *url = [[NSURL alloc]initWithString:sURL];
[request setURL:url];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);
私の ASP.NET MVC3 コントローラー メソッド
[HttpPost]
public ActionResult Create(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/images/id"), fileName);
file.SaveAs(path);
}
return View();
}
これをシミュレーターから実行すると、MVC3 コントローラーでファイル (HttpPostedFileBase が null ではない) を取得します。デバイスから同じコードを実行すると、ファイルは NULL になります。
私は何か間違ったことをしていますか?誰か助けてくれませんか...
編集-@Martinに感謝します。手がかりを教えてくれました。
会社のプロキシ サーバーが原因で奇妙な問題が発生していることがわかりました。あなたの提案に従って、私は Windows マシンに Fiddler インスタンスをセットアップしようとしていて、それを iPAD のプロキシとして構成しました。驚いたことに、私のアップロード機能は問題なく動作しましたが、企業のプロキシで試してみると失敗しました。私はすぐにそれを理解しようとします..あなたの応答@Martin Rに感謝します...とても感謝しています。