2011-11-08 5 views
-2

テーブルがExcelスプレッドシートに変換されたASP.NET Webアプリケーションを開発しています。私は、ダウンロードセクション以外の場所に保存するオプションをユーザーに与えたいと思います。これは禁止されている可能性が高いことは分かっていますが、ASP.netフレームワークによって促進される何らかのクラス/メカニズムがあるかもしれません。ファイル名は、実際に私のコードでファイルパス+ファイル名を記憶しているとして、私はファイル名を使用しています方法は、この文脈では間違っている知っている指定されたダウンロードフォルダ以外の別のフォルダにプログラムで保存する方法はありますか?

protected void saveDataButton_Click(Object sender, EventArgs e) 
    { 
     SaveFileDialog browser = new SaveFileDialog(); 
     string fileName; 

     if (browser.ShowDialog() == DialogResult.OK) 
     { 
      fileName = browser.FileName; 
     } 
     else 
      return; 

     DataTable table = (DataTable)Session["tableData"]; 


     HttpContext context = HttpContext.Current; 
     context.Response.Clear(); 

     context.Response.ContentType = "text/csv"; 
     context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName + ".csv"); 



     foreach (DataColumn column in table.Columns) 
     { 
      context.Response.Write(column.ColumnName + ";"); 
     } 
     context.Response.Write(Environment.NewLine); 
     foreach (DataRow row in table.Rows) 
     { 
      for (int i = 0; i < row.ItemArray.Length; i++) 
      { 
       context.Response.Write(row[i].ToString().Replace(";", string.Empty) + ";"); 
      } 
      context.Response.Write(Environment.NewLine); 
     } 

     context.Response.End(); 
    } 

は、ここに私の現在のコードです。ファイルパスを指定する方法はありますか?

私が考えることができる唯一の他の解決策は、ページ上に何らかの種類のファイルを作成し、右クリック+保存をした場合です。これは悪い選択肢ですか?他にはありますか?

+0

WindowsアプリケーションまたはASP.Net Webフォームアプリケーションは、Webに似ていますか? – Lloyd

+3

あなたは本当にASP.NETアプリケーションでSaveFileDialogを使用していますか? –

+0

ペリ:もはやロル。あまり意味がない。 /embarassment – Chad

答えて

3

いいえ。ウェブアプリケーションはローカルファイルシステムについて何も知らない。 (実際にはcontent-dispositionヘッダーを除いて、HTTPプロトコルでは "ファイル"が何であるかは実際には分かりません)

content-dispositionヘッダーの完全なパスを除いて、正しいことは何ですか。ファイルをWebクライアントに送信する標準的な方法は、そのヘッダーを設定し、ファイルの内容を出力に書き出すことです。クライアント側で起こることは、完全にWebブラウザに依存します。プロンプトを表示せずにダウンロードを特定のフォルダに自動的に保存するようにユーザーのWebブラウザが設定されている場合、そのファイルをサーバーから変更することはできません。

1

いいえ、ユーザーのコンピュータに保存されているファイルは、Webブラウザによって指定されますが、Webサーバーとは関係ありません。それについて考えると、サイト訪問者がどのオペレーティングシステムを実行しているのか、サーバー上で指定した任意のパスはもちろん、わからないことがあります。

関連する問題