0

応答からビデオ ファイルをダウンロードしています。HUD進行状況のダウンロード進行状況バーを表示したい。しかし、どうすればそれができますか。私は検証jsonをサーバーに送信しており、ビデオファイルのバイトを送り返すサーバー検証を送信しています。HUDプログレスバーを使って、ダウンロードの何%が完了したかを表示したいです。

呼び出すと[request setDidReceiveDataSelector:@selector(request:didReceiveBytes:)]; 、取得したバイト数が表示されますが、バイトはキャッシュファイルに保存されません (ファイルは電話に保存されません)。

  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[[NSURL alloc] initWithString:@"http://testing.io/dev.php/video/verifyReceipt"]];
  [request setPostValue:resultAsString forKey:@"verify"];// sending json in post 
[request setDidReceiveDataSelector:@selector(request:didReceiveBytes:)]; 
[request setDidFinishSelector:@selector(requestDone:)];
[request setTimeOutSeconds:120];
[request setDelegate:self];
[request setNumberOfTimesToRetryOnTimeout:2];
[request setDownloadProgressDelegate:self];
request.showAccurateProgress = YES;

[request startSynchronous];

 }
 -(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data
 {
[videoData appendData:data];// appending data with global NSmutabledata
  NSLog(@"data is %@",data);
   }

- (void)requestDone:(ASIHTTPRequest *)request{
//[MBProgressHUD hideHUDForView:self.view animated:YES];

// SAVED Video PATH
// Get the Document directory
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// Add your filename to the directory to create your saved video location
NSString* movLocation = [documentDirectory stringByAppendingPathComponent:[fileName stringByAppendingString:@".mov"]];

if(request.responseStatusCode==200)
{
    [videoData writeToFile:movLocation atomically:NO];
    NSLog(@"in request done sucsessfully downlaod and store in database %d",request.responseStatusCode);
    [DBHelper savePurchaseId:fileName];
    [self movieReceived];
}
else{

      NSLog(@"in request downlaod and store in database failed %@",request.responseHeaders);

}
 }
     -(void)requestFailed:(ASIHTTPRequest *)request
      {

NSLog(@"%@",request.error);

      }
4

2 に答える 2

0

適切ではないかもしれない方法を考えていますが、多くのコードを書く手間を省くことができます。

最初に、UIProgressViewこのようにダウンロード進行デリゲートとして通常のインスタンスを設定します

[request setDownloadProgressDelegate:uiprogreeViewInstance];

これで、ASIHTTPRequest フレームワークは、ダウンロードが行われるときに進行状況ビューを更新します。ProgressView には という名前のプロパティがprogressあり、範囲は 0.0 から 1.0 です。

MBProgressHUD をインスタンス化し、必要な場所にサブビューとして追加します。インスタンスのprogress値を の値に設定します。uiprogressview インスタンスを非表示にします。MBProgressHUDUIProgressView

于 2013-06-17T12:33:06.503 に答える
0

fileUrl = 動画をダウンロードする URL の文字列。

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[fileUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:destPath append:NO];
    [操作 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *操作、id responseObject)
    {
        // ダウンロードが成功したことを警告します。
        NSLog(@"%@ へのファイルのダウンロードに成功しました", destPath);

        /* デリゲートを呼び出して結果を返す。*/
        [self.target parserDidDownloadItem:destPath];

        HUD.detailsLabelText = [NSString stringWithFormat:@"%@ %i%%",[JGlobals getLocalvalue:@"Downloading"],100];
        [HUD hide:TRUE];
    }
    失敗:^(AFHTTPRequestOperation *操作、NSError *エラー)
    {
        // ダウンロードに失敗したことを警告する
        NSLog(@"エラー: %@"、エラー);

        /* デリゲートを呼び出して結果を返す。*/
        [self.target parserDidFailToDownloadItem:エラー];
        [HUD hide:TRUE];

    }];
    [オペレーション setDownloadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite)
    {
         // 進捗
         float totalProgress = (totalBytesWritten / (totalBytesExpectedToWrite * 1.0f) * 100);
         HUD.detailsLabelText = [NSString stringWithFormat:@"ダウンロード %i%%", MIN((int)(totalProgress), 99)];
     }];
    [操作開始];
于 2013-06-17T12:03:27.507 に答える