1

リモート URL からビデオをダウンロードして、iPhone アプリのファイルに保存したいと考えています。 AVPlayer から使用したので、ビデオ リンクが機能することはわかっていますが、ダウンロードできません。応答は常に (null) です。

次のコードの何が問題になっていますか?

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:someURLString]];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:someFilePath append:NO];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Successfully downloaded file to %@", [NSURL fileURLWithPath:someFilePath]);
        NSLog(@"THE RESPONSE: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

    [operation start];

アップデート

operation.outputStream の行をコメントアウトしたところ、今度はレスポンスが返ってきました。これは、ファイル パスに何か問題があるということですか?

4

2 に答える 2

0

そのファイルへのリンクを作成し、NSURLConnection を使用してダウンロードします。

ダウンロードする URL 接続を作成します。

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:strFileUrl]]; //strFileURL is url of your video/image
NSURLConnection *conection = [[[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO] autorelease];
[conec start];
[request release];

データを保存するファイルのパスを取得:

strFilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:strFileName];

クラスは NSURLConnectionDelegate プロトコルの 3 つのメソッドを採用する必要があります: (プロトコルとデリゲートについてお読みください)

   - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        // create 
        [[NSFileManager defaultManager] createFileAtPath:strFilePath contents:nil attributes:nil];
        file = [[NSFileHandle fileHandleForUpdatingAtPath:strFilePath] retain];// read more about file handle
        if (file)   {
            [file seekToEndOfFile];
        }
    }



 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)receivedata
    {    
        //write each data received
        if( receivedata != nil){
            if (file)  { 
                [file seekToEndOfFile];
            } 
            [file writeData:receivedata]; 
        }
    }

    - (void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
        //close file after finish getting data;
        [file closeFile];
    }

    - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    {
        //do something when downloading failed
    }

ファイルを確認したい場合は、UIWebview を使用して読み込みます。

 NSURL *fileURL = [NSURL fileURLWithPath:strFilePath];
    [wvReview loadRequest:[NSURLRequest requestWithURL:fileURL]];
于 2013-07-21T06:37:57.777 に答える
0

これがうまくいかなかったのです。

ビデオの URL をファイル パスの一部として使用していました。

なぜこれが間違っているのですか?バックスラッシュが付いているので、iOS が混乱していると思います。

教訓: ファイルを作成するためにディレクトリに追加する文字列にバックスラッシュが含まれていないことを確認してください。

これが、このばかげた間違いを犯した他の人の助けになることを願っています。:P

于 2013-07-21T08:42:54.733 に答える