0

ローカル ワード (または rtf) ファイルをサーバーにアップロードしたいと考えています。コンテンツなしでファイルをアップロードします。エラーコードなどはありません。

NSString *urlString = @"http://myserver.com/upload-c.php";
NSString *filename=@"xx.docx";

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"xx.docx"]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n",filename]] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:data]];

[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding] autorelease];

NSLog(@"%@",returnString);
4

1 に答える 1

1

明らかな問題の 1 つは、data変数を初期化する方法にあります。

「xx.docx」がアップロードしたいファイルであると仮定すると、2 つの問題があります。

  1. ファイル名だけでなく、ファイルへのフル パスを指定する必要があります。
  2. ファイル パスからを作成しているため、 ではなくNSURLを使用する必要があります。fileURLWithPath:URLWithString:

編集: コメントに基づいて、ファイルはアプリのリソース バンドルにあります。フルパスを取得するには、次のようにする必要があります。

NSString *fullPath = [[NSBundle mainBundle] pathForResource:@"xx" ofType:@"docx"];
NSData *data = [NSData dataWithContentsOfFile:fullPath];

また、この行:

[body appendData:[NSData dataWithData:data]];

単に次のようにする必要があります。

[body appendData:data];

への呼び出しを取り除きますstringWithString:。例:

[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

次のようにする必要があります。

[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

と:

NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];

次のようにする必要があります。

NSString *boundary = @"---------------------------14737809831466499882746641449";
于 2013-07-17T23:30:06.963 に答える