POSTデータを生成する際、100MBくらいのサイズになるとNSDataに変換する時に落ちてしまう。

そんな時AFNetworkingを使うと、カンタンに大きなファイルをアップロードすることが出来る。
コードはこんな感じ。

NSURL *fileURL = [NSURL fileURLWithPath:@"アップロードしたいファイルのパス"];
NSURL *baseUrl = [NSURL URLWithString:@"アップロード先URL"];
NSDictionary *params = @{@"key": @"りくえすとぱらめーたはこのへんで定義"};

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:baseUrl];
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"/アップロード先パス" parameters:params constructingBodyWithBlock:^(id formData) {
    // ここでアップロードしたいファイルをInputStream化してセット
    NSInputStream *inputStream = [NSInputStream inputStreamWithURL:fileURL];
    NSDictionary *fileInfo = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
    [formData appendPartWithInputStream:inputStream name:@"file" fileName:fileURL.lastPathComponent length:[[fileInfo objectForKey:NSFileSize] unsignedLongLongValue] mimeType:@"application/zip"];
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    // 進捗状況に関する処理
}];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // リクエスト成功時の処理
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // リクエスト失敗時の処理
}];

[operation start];

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Name *
Email *
Website

*