2009-06-03 20 views
1

sourceforgeのように、ほとんど同じことをやろうとしています。ユーザーがいくつかのデータを作成した後、私はファイルを生成し、ページが読み込まれた後にそのファイルを提供したいと思います。しかし、私はほとんどjavacriptと簡単なコピーの貼り付けについては何も知らないリダイレクトせずにページをロードした後にファイルをロードする

< script type="text/javascript"> 
var download_url = "http://downloads.sourceforge.net/sourceforge/itextsharp/itextsharp-4.1.2-dll.zip?use_mirror=dfn"; 


function downloadURL() { 
    if (download_url.length != 0 && !jQuery.browser.msie){ 
     window.location.href = download_url; 
    } 
} 

jQuery(window).load(downloadURL); 

< /script> 

は十分ではありません。ユーザーがファイルをダウンロードすることは重要なので、どのように行うのですか?

私は作成したファイルをどこに保存するのですか?一度、asp.net開発サーバーを使用して、実際のiisサーバーを使用していますか?そして、このアドレスはどのように見えるべきでしょうか?私は

を試みたとき、私は未知のアドレスのHTTPエラーで、何を得ていませんでした。

答えて

1

Haack's DownloadResultを参照してください。あなたがしていることを正確に説明しています。あなたはあなたのダウンロードアクションURLをタイムアウトの呼び出しを提供することを除いて。

1

のPDFファイルを生成されたものである

window.location.href='http://www.yourServer.com/generatePDF.asp?whatever=whatever' 

は、あなたがに応答ヘッダーでコンテンツの配置を設定する必要があります。

次のようなものを使用することができます「添付書類」としてthese answersに記載されている。

これを行うと、ダウンロードはブラウザに現在表示されているページに影響しません。したがって、Javascriptで添付ファイルを取得するリクエストを開始すると、ブラウザはページを1つだけ残し、Open/Save/Cancelのメッセージボックスが表示されます。

0

いくつかの違いがあります。まず、MVCを使用しているため、実際にファイルを生成するアクションを作成し、FileResultとして返します。このファイルはサーバー上の実際のファイルでもかまいませんが、動的に生成することもできます。たとえば、MemoryStreamやFileResultから動的に生成することができます。コンテンツをapplication/octet-streamに設定するか、プラグインを介してブラウザでレンダリングするものでない場合は実際のファイルタイプを設定します。次に、ページをレンダリングするアクションでファイルを生成せず、参照した手法を使用してそのページからFileResultを生成するアクションを呼び出します(ただし、IEでは異なる動作をしているように見えます)。 MIMEタイプがレンダリング可能なタイプでない場合、ダウンロードされます。

public ActionResult GenerateFile(string value, int other) 
{ 

    MemoryStream file = new MemoryStream(); 
    ... 

    return File(file, "application/octet-stream"); 
} 
+0

問題は、私はiTextのを使用しています、ですpdfを生成するライブラリ。したがって、作成されるファイルはDocument型であり、FileResultと互換性がありません。しかし、pdfを生成する別の方法がある場合..? – Trimack

1

あなたはこのようのActionResult拡張し、独自のPdfResultを作成することができます。

public class PdfResult : ActionResult 
{ 
    public byte[] Content { get; set; } 
    public string FileName { get; set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var response = context.HttpContext.Response; 
     response.AddHeader("content-disposition", "attachment; filename=" + this.FileName); 
     response.AddHeader("content-length", this.Content.Length.ToString()); 
     response.ContentType = "application/pdf"; 

     using (MemoryStream memoryStream = new MemoryStream(this.Content)) 
     { 
      memoryStream.WriteTo(response.OutputStream); 
     } 

     response.End(); 
    } 

次のように次に、あなたのアクションであなたは、単にファイルを返すことができます。

public ActionResult Pdf(string param1...) 
    { 
     var content = GeneratePdf(); //etc 
     var fileName = AssignFileName(); 

     return new PdfResult { Content = content, FileName = fileName + ".pdf" }; 
    } 
関連する問題