public async Task <IActionResult> thumb(string FileName) { if (!long.TryParse(Path.GetFileNameWithoutExtension(FileName), out long media_id)) { return(StatusCode(400)); } //まずは鯖内のファイルを探す 拡張子はリクエストURLを信頼して手を抜く string localmedia = MediaFolderPath.ThumbPath(media_id, FileName); if (System.IO.File.Exists(localmedia)) { return(PhysicalFile(localmedia, GetMime(FileName), true)); } //鯖内にファイルがなかったのでtwitterから横流しする var MediaInfo = await DB.SelectThumbUrl(media_id).ConfigureAwait(false); if (MediaInfo == null) { return(StatusCode(404)); } var ret = await Download(MediaInfo.Value.media_url + (MediaInfo.Value.media_url.IndexOf("twimg.com") >= 0 ? ":thumb" : ""), MediaInfo.Value.tweet_url).ConfigureAwait(false); if (RemovedStatusCode(ret.StatusCode)) { Removed.Enqueue(MediaInfo.Value.source_tweet_id); } if (ret.FileBytes != null) { //画像の取得に成功したわけだし保存しておきたい StoreMediaBlock.Post((MediaInfo.Value, ret.FileBytes)); return(File(ret.FileBytes, GetMime(FileName))); } else { return(StatusCode((int)ret.StatusCode)); } }