Example #1
0
        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));
            }
        }