2016-06-17 4 views
1

C#のasp.netコア内のパス:例えば、デスクトップ、私はこのコードを使用してい :変更ファイルのアップロード、私はMTのCに現在のルートフォルダからのパスを変更したい

public IActionResult About(IList<IFormFile> files) 
{ 

    foreach (var file in files) 
    { 
     var filename = ContentDispositionHeaderValue 
         .Parse(file.ContentDisposition) 
         .FileName 
         .Trim('"'); 
     filename = hostingEnv.WebRootPath + [email protected]"\{filename}"; 

     using (FileStream fs = System.IO.File.Create(filename)) 
     { 
      file.CopyTo(fs); 
      fs.Flush(); 
     } 
    } 


    return View(); 
} 

を私が試しましたwebrootpathを変更するか、$ @の後で操作しますが、無駄にしないでください。

+1

あなたのアプリのルートフォルダ以外のファイルにアクセスしようとしていますか? –

+0

はい私は............... –

+0

私はあなたに十分な情報を与えたとは思わない。 [MCVE](http://stackoverflow.com/help/mcve)を作成するか、少なくとも1つ取得している場合は、どのようなエラーが発生しているかを教えてください。 – Zack

答えて

0

あなたがotpions論文のいずれかを使用しない限り、あなたは、あなたのWebアプリケーションのルート・ファイル外の任意のファイルをアクセスもできません。

  1. アップロードファイルのcontroler使用しますウィッヒで

    <input type="file" name="UploadFile" /></span> 
    

をアップロードするファイルをユーザーに指定させる必要があります。

  1. FTPを使用すると、サーバーを自分で作成する必要があります。

    が自由にC内のファイルを通過することができること:Webアプリケーションの後ろにコードを使用して\ MAJOR欠如を表すことになり、私はASPの専門家ではないんだけど、私はこの1つの事を知っている

セキュリティの

EDIT:

そして、これがユーザーにファイルを与える方法次のとおりです。

private void UserDownload(string fileOutPutName, string fileType, string fileContentPath) 
    { 

     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlPathEncode(fileOutPutName)); 
     Response.ContentType = fileType; 
     try 
     { 
      Response.WriteFile(fileContentPath); 
     } 
     catch 
     {} 
     Response.End(); 
    } 

ファイルつもり彼らのブラウザのダウンロードフォルダに終わるされます。クライアントのCにファイルを書き込むことができること:\は、彼のCへのアクセスと同じくらい安全ではないだろう:

\ ASP.NETは

+0

私は現在ファイルをアップロードでき、wwwrootファイルに保存します。私の視覚スタジオプロジェクトフォルダ、別の場所に保存したい(デスクトップなど) –

+0

真剣に...あなたの環境にファイルを保存できる唯一の場所は、ブラウザのdowloadフォルダです。 –

+1

私はまた、クライアントのデスクトップ上のファイルにアクセスすることはそれほど劇的ではないと自問しています。しかし、それはWebアプリケーションです!どのWebサイトでもc:\にアクセスできると想像してみてください。自分のWebページにアクセスするとすぐに、ほとんどのコンピュータを削除する機能を最初に作成します。私はFTPの専門家ではないと言っていますが、あなたがそれについて読んだら、easelyでもできることを知っています。 –

1

他の答えはからファイルをダウンロード混同しているように見えることをあなたはさせませんファイルをアップロードしているサーバー。

IHostingEnvironment.WebRootPathは、サーバー上の静的ファイル(デフォルトではwwwrootフォルダ)へのパスです。アップロードしたファイルをWebRootPath以外のディレクトリに保存するには、hostingEnv.WebRootPathをマシン上の他のディレクトリへのフルパスで置き換えるだけです。

public IActionResult About(IList<IFormFile> files) 
{ 
    foreach (var file in files) 
    { 
     var filename = ContentDispositionHeaderValue 
         .Parse(file.ContentDisposition) 
         .FileName 
         .Trim('"'); 
     filename = @"C:\UploadsFolder" + [email protected]"\{filename}"; 

     using (FileStream fs = System.IO.File.Create(filename)) 
     { 
      file.CopyTo(fs); 
      fs.Flush(); 
     } 
    } 
    return View(); 
} 

ただし、このディレクトリが存在し、アプリケーションにそのディレクトリへの書き込み権限があることを確認する必要があります。 Visual Studioからデバッグでアプリケーションを実行すると、ユーザーとして実行されるので、書き込みにアクセスできるディレクトリである必要があります。プロダクション環境では、それはより複雑になり、ホスティングの設定によって異なります。

関連する問題