2012-03-19 12 views
1

バックエンドでMVC3 .netコントローラを使用して、HttpPostを実行してHttpContext経由でファイルを送信しています。JsonResultのファイルを返すか、ActionResultのJsonデータを返しますか?

サーバーがファイルを読み取ると、アップロード結果と共に文字列のリストが返されます。

はこれまでのところ、私は2つのシナリオが働いてもらうことができた:

1)化するJsonResult

string tabSeparatedMessages = ""; 

foreach (string message in messageLog) 
{ 
    tabSeparatedMessages = tabSeparatedMessages + message; 

    if (message != messageLog[messageLog.Count - 1]) 
    { 
     tabSeparatedMessages = tabSeparatedMessages + '\n'; 
    } 
} 
return this.Json(new 
{ 
    success = true, 
    total = messageLog.Count, 
    data = tabSeparatedMessages 
}, "text/html", JsonRequestBehavior.AllowGet); 

2としてシングル、タブ区切りの文字列として文字列のリストを返します)を返しますActionResult

string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".txt"; 

using (StreamWriter writer = new StreamWriter(fileName)) 
{ 
    foreach (string message in messageLog) 
    { 
     writer.WriteLine(message); 
    } 
} 

return File(fileName, "text/plain", "UPLOAD_RESULTS.txt"); 

私の問題として、テキストファイル内の文字列のリストには、私は、これらの方法のそれぞれの要素をしたいが、難し2を組み合わせることが生じていますということです。私はJsonResultが真の値を返すことができるようにして、モーダルを待つメッセージをクライアント上で解放することができます。私は、GUIコンポーネントに文字列のリストを解析するのではなく、単にクライアントがファイルをダウンロードできるように、ActionResultが必要です。

ActionResultを使用してJsonResultの一部としてダウンロードするテキストファイルを返すか、Jsonデータを返す方法はありますか?

ありがとうございます

答えて

2

残念ながら、一度に1つの結果タイプしか返せません。私があなたで、本当にupload_results.txtをクライアントにダウンロードする必要があった場合、私のjson結果にパラメータがあります。これはサーバー上のファイルへの参照です。

クライアントは最初にアップロードが成功し、モーダルダイアログを非表示にしてから、javascriptを使用してupload_results.txtファイルをもう一度リクエストします。

+0

MVC3コントローラは、リクエストごとに分解されていると私は理解しています。ファイル生成要求とダウンロード要求の間にユーザーとファイルの関係を維持する方法について、あなたや他の誰かがお勧めしますか?私はそれを生成したユーザーと一緒に一時ファイルパスをデータベースに保存することを考えていますが、1人のユーザーに複数のファイルが関連付けられている可能性があり、ダウンロードするファイルを確実に確認する方法がわかりません正しい要求から。 –

+1

クライアントに送信され、ファイルの呼び出しに使用されたGUIDキーを使用して、Webサーバーのキャッシュにファイルを格納します。これにより、サーバー上のキャッシュ・エントリとしての残りのファイルが5分で消滅するか、適切なものが見つかった場合に問題が解決されます。 –

+0

デイヴィッドが説明しているように、私はそれをどうやってやったのでしょう。 GUIDキーはjson-responseで送信したいもので、キャッシュ内にそのGUIDでタグ付けされたファイルを要求するか、データベースを好む場合は要求します。 – Tobias

0

私は上記に同意し、JSONを送信して一時的にWebサーバーに保存します。 JSONでこのファイルへのパスを取得してから、GETを実行してください。

関連する問題