をバイト配列に戻って変更して、ファイルを書き込むことができ、クライアントに続いてアクション
public IHttpActionResult GetEbooks()
{
var filePath = "{some file path}";
var fileName = System.IO.Path.GetFileName(filePath);
var fileBytes = System.IO.File.ReadAllBytes(filePath);
var fileString = Convert.ToBase64String(fileBytes);
var returnData = new EbookCollection();
returnData.Ebooks.Add(new Ebook()
{
Title = "ebook1",
FileName = fileName,
Content = fileString
});
return Ok(JsonConvert.SerializeObject(returnData));
}
public class EbookCollection
{
public List<Ebook> Ebooks { get; set; }
public EbookCollection()
{
this.Ebooks = new List<Ebook>();
}
}
public class Ebook
{
public string Title { get; set; }
public string Content { get; set; }
public string FileName { get; set; }
}
の簡単な例であるあなたは本当にのようなAPIにちょうどメタデータを返す必要がありますあなたが記述したものと、内部にはebook
レコードが挿入されています。
あなたのAPIからの応答は以下のJSONのようになります。
{
"ebooks": [
{
"title": "ebook 1",
"pictures:" [
"http://myhost/pictures/picture1.jpg",
"http://myhost/pictures/picture2.jpg",
],
"document": "http://myhost/ebooks/ebook1.pdf"
},
{
"title": "ebook 2",
"pictures:" [
"http://myhost/pictures/picture3.jpg",
"http://myhost/pictures/picture4.jpg",
],
"document": "http://myhost/ebooks/ebook2.pdf"
}
]
}
このアプローチは完全にRESTfulであるとHATEOAS制約はあなたが行うことをお勧めまさにです:あなたのリソースは、アドレス指定可能とします。
あなたはJSONと同じ応答を使用して生のバイナリコンテンツの両方を返すことができない、と私は強くあなたが2つの主な理由のためのJSONレスポンスにそれらをBase64で文字列にあなたのファイルを変換して返す避けることをお勧め
:
- Base64エンコーディングincreases up to the 33% percentファイルのサイズ
- あなたのAPIの応答は巨大になります。 10個の電子ブックレコード(わずかなamout)だけを返さなければならないと想像してください。これは、大量のデータ(pdf、画像など)をBase64にエンコードする必要があることを意味します。 APIからの簡単な応答により、ブラウザは数百MBのデータをダウンロードする可能性があります。