バックエンドで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データを返す方法はありますか?
ありがとうございます
MVC3コントローラは、リクエストごとに分解されていると私は理解しています。ファイル生成要求とダウンロード要求の間にユーザーとファイルの関係を維持する方法について、あなたや他の誰かがお勧めしますか?私はそれを生成したユーザーと一緒に一時ファイルパスをデータベースに保存することを考えていますが、1人のユーザーに複数のファイルが関連付けられている可能性があり、ダウンロードするファイルを確実に確認する方法がわかりません正しい要求から。 –
クライアントに送信され、ファイルの呼び出しに使用されたGUIDキーを使用して、Webサーバーのキャッシュにファイルを格納します。これにより、サーバー上のキャッシュ・エントリとしての残りのファイルが5分で消滅するか、適切なものが見つかった場合に問題が解決されます。 –
デイヴィッドが説明しているように、私はそれをどうやってやったのでしょう。 GUIDキーはjson-responseで送信したいもので、キャッシュ内にそのGUIDでタグ付けされたファイルを要求するか、データベースを好む場合は要求します。 – Tobias