2016-09-03 7 views
1

ファイルシステムに正常にアップロードされたイメージがあり、そのファイルにアクセスしたいと思っています。だから、私はGET -methodファイルシステムからイメージを返す

[HttpGet] 
public ActionResult Get(string id) { 
    var path = [email protected]"d:\smth\upload\{id}.jpeg"; 
    return File(path, "image/jpeg"); 
} 

を書かれている私はCould no find file例外を取得File(path, "image/jpeg")を作成しようと、いつでも必要な名前を持つ必要なパス内のファイルがあることを完全に確信している、しかし。私はwwwroot以外のフォルダにアクセスできないようです。たぶん私はworking with static file articleから何か重要なものを逃したでしょうか?だから、

、あなたは、それは外の世界では誰もが作ることを意味するであろうことができれば、誰もが、あなたがすることはできませんGET -method

+0

適切な回答を得るには、次に正しいタグを使用してください。 asp.net-mvcタグは古いMVC webstack用です! ASP.NET Core MVCでは[tag:asp.net-core-mvc]を使用してください! – Tseng

答えて

4

何@Shyjuの言うことは真実であると(GitHub sourceを参照)Fileヘルパーメソッドは、物理ファイルパスを受け入れないPhysicalFileヘルパーメソッドが行うことながら。

[HttpGet] 
public ActionResult Get(string id) { 
    var path = [email protected]"d:\smth\upload\{id}.jpeg"; 
    return PhysicalFile(path, "image/jpeg"); 
} 
-1

を介してウェブ・サーバフォルダ外のファイルシステムに格納されている画像を返す方法を説明できますGET/POSTフォームを開き、パブリックフォルダの外部にあるファイルにアクセスします。誰かがあなたのウェブサーバにファイルをアップロードした場合、あなたのtmpディレクトリに存在するはずです。あなたはaspでアクセスできるはずです。

3

Fileメソッドには、物理​​的な位置をとるオーバーロードはありません。あなたのイメージはWebアプリケーションのルートの下にあるべきである仮想パスを取るものがあります。

しかし、あなたの用途に使用できるanother overloadがあります。これは、Fileメソッドの最初の引数としてバイト配列を取ります。アクセス可能な物理ディレクトリ(ファイルが存在することを想定)からファイルを読み取り、バイト配列に変換してFileメソッドに渡すことができます。

[HttpGet] 
public ActionResult Get(string id) 
{ 
    var path = [email protected]"d:\smth\upload\{id}.jpeg"; 
    byte[] bytes = System.IO.File.ReadAllBytes(path); 
    return File(bytes, "image/jpeg"); 
} 
+0

btw。参照されるMSDNの記事は、System.Webに依存しないWebStackの完全な書き換えであるASP.NET Core MVCではなく、ASP.NET MVCについてです(System.Web。*名前空間で参照できます)。 。*(したがってIISに依存しない) – Tseng

関連する問題