2

アプリケーションドキュメントフォルダに保存されている(さまざまな形式の)ファイルをアップロードしたい。その行のファイルをアップロードしようとしている行を選択すると、テーブルビューにすべてのファイルが表示されます。これが私のコードです

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
   NSString *urlString;
if (indexPath.section == 0)
    {
       fileUrlToUpload = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:documents[indexPath.row] ofType:nil]];
}
else
{
fileUrlToUpload = [self.documentURLs objectAtIndex:indexPath.row];

}
[self setupDocumentControllerWithURL:fileUrlToUpload];

urlString =   [[fileUrlToUpload path] lastPathComponent];
printf("\n the string is :%s",[urlString UTF8String]);
[self publishToServer:urlString]; 

 -(void)publishToServer:(NSString *)str
  {
if([str length] > 0) 
{

    NSString *urlPath=@"";
    urlPath= str;
    NSString *urlString = @"http://162.108.0.8:8080/Path/upload_path.jsp?";
    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 *postBody = [NSMutableData data];


    [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"path\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [postBody appendData:[[NSString stringWithString:urlPath] dataUsingEncoding:NSUTF8StringEncoding]];
    [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--",boundary] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];

    [request setHTTPBody:postBody];
     NSLog(@"request ===  %@",request);

    NSData *returnData =nil;
    returnData= [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    NSLog(@"returnData ===  %@",returnData);

    NSString * string=[[NSString alloc]initWithData:returnData encoding:NSUTF8StringEncoding];
  }

1)シミュレーターからファイルを投稿しようとすると、サーバーデータベースにnull値が保存され、応答として「Uploadsuccessfully」を受信します。
2)デバイスからファイルを投稿しようとすると、サーバーでnull値が取得されません。

私を助けてください。

ありがとうございました

4

1 に答える 1

0

ファイルの種類についてはわかりませんが、画像をアップロードできますが、ここで考えられるすべての例を試しましたが、何も機能しませんでした ($_FILES 配列が空でした)。 :

- (void) uploadLog :(NSString *) filePath
{
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
NSString *urlString =[NSString stringWithFormat:@"http://www.yoursite.com/accept.php"];
// to use please use your real website link.
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

NSString *boundary = @"_187934598797439873422234";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
[request setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
[request setValue:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14" forHTTPHeaderField:@"User-Agent"];
[request setValue:@"http://google.com" forHTTPHeaderField:@"Origin"];

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"Content-Length %d\r\n\r\n", [data length] ] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"picture\"; filename=\"%@.png\"\r\n", @"newfile"] dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[@"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];
[request addValue:[NSString stringWithFormat:@"%d", [body length]] forHTTPHeaderField:@"Content-Length"];


NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@", returnString);
}

そして、これが私のために機能するphp部分です(申し訳ありませんが、私はjspに慣れていません):

<?php
    $target_path = "./uploads/";  

    $target_path = $target_path . basename( $_FILES['picture']['name']);  

    if(move_uploaded_file($_FILES['picture']['tmp_name'], $target_path)) {  
    echo "The file ".  basename( $_FILES['picture']['name'])." has been uploaded";  
    } else{  
    echo "There was an error uploading the file, please try again!";  
    } 
 ?>
于 2012-10-22T16:24:18.083 に答える