0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RestSharpを使ってファイルのダウンロードを試してみたが、公式のやり方ではうまくいかなかった話

Last updated at Posted at 2020-09-01

RestSharpを使ってファイルのダウンロードを行おうとしたのですが、公式サイトに記載の方法だとなぜかファイルがダウンロードされませんでした。
そのため、備忘録としてこちらに残しておきたいと思います。

前提条件

RestSharpがインストールされていること。

事象

公式サイトでは、以下の通り記載されていました。
Working with Files | RestSharp

var tempFile = Path.GetTempFileName();
using var writer = File.OpenWrite(tempFile);

var client = new RestClient(baseUrl);
var request = new RestRequest("Assets/LargeFile.7z");
request.ResponseWriter = responseStream =>
{
    using (responseStream)
    {
        responseStream.CopyTo(writer);
    }
};
var response = client.DownloadData(request);

これをほぼ流用する形で、

var client = new RestClient(baseUrl);
var request = new RestRequest("Assets/LargeFile.7z");

を、

var client = new RestClient("コンテンツのURL");
var request = new RestRequest();

に変更して実行したところ、responseがnullとなって返ってきてしまい、ダウンロードに失敗してしまいました。
もちろんURLが間違っているというわけではありませんでした。
baseUrlにまるまるコンテンツのURLを渡してしまったのがよくなかったのか?と個人的には思いましたが、本当の原因はよくわかりませんでした。)

解決方法

色々調べてみた結果、以下の方法でファイルのダウンロードに成功しました。

var client = new RestClient("コンテンツのURL");
var response = client.DownloadData(new RestRequest(Method.GET));

ちなみに変数responseには、バイト配列(ファイルデータの実体)が入っています。
そのため、File.WriteAllBytesAsyncなどを使ってファイル書き込みをすることで、ローカルに保存することができます。

File.WriteAllBytesAsync("ローカルの保存先", response);

まとめ

RestSharpを使ってファイルのダウンロードを行う方法について、公式以外にもやり方があったのでまとめました。
公式に載っている方法が必ずしもうまくいくわけではないということがわかりました。
できれば公式の方法でやるほうが信頼性が高いので間違いないですが、そこは臨機応変に使い分けていきたいところです。
(RestSharpは公式ドキュメントがあまり充実していないのが残念なところですね。。)

参考URL

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?