2017-07-06 16 views
1

ダウンロードファイルボタンをクリックしたときに送信するファイルを保存するために、ブラウザにファイルの保存ダイアログボックスを表示または開くようにします。ダウンロード用ファイルをダウンロードするときにクライアントがファイルを保存するダイアログを開く方法

私のサーバー側のコードは:あなたは、クライアント側で保存する応答をする場合

func Download(w http.ResponseWriter, r *http.Request) { 
    url := "http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png" 

    timeout := time.Duration(5) * time.Second 
    transport := &http.Transport{ 
     ResponseHeaderTimeout: timeout, 
     Dial: func(network, addr string) (net.Conn, error) { 
      return net.DialTimeout(network, addr, timeout) 
     }, 
     DisableKeepAlives: true, 
    } 
    client := &http.Client{ 
     Transport: transport, 
    } 
    resp, err := client.Get(url) 
    if err != nil { 
     fmt.Println(err) 
    } 
    defer resp.Body.Close() 

    //copy the relevant headers. If you want to preserve the downloaded file name, extract it with go's url parser. 
    w.Header().Set("Content-Disposition", "form-data; filename=Wiki.png") 
    w.Header().Set("Content-Type", r.Header.Get("Content-Type")) 
    w.Header().Set("Content-Length", r.Header.Get("Content-Length")) 
    //dialog.File().Filter("XML files", "xml").Title("Export to XML").Save() 
    //stream the body to the client without fully loading it into memory 
    io.Copy(w, resp.Body) 
} 
+1

は、関連の質問を参照してください。 – zerkms

+0

私は "添付ファイル"を設定しようとしましたが、ブラウザからダイアログを表示しません – cuong

+0

また、悪い "ソース"からコンテンツタイプと長さを設定しました。下の私の答えを見てください。 – icza

答えて

3

"attachment"コンテンツ気質タイプを使用します。これはrfc2183に詳述され、セクション2.2:

2.2添付処分タイプ

ボディ部は、彼らがメールメッセージの本体とは別 、およびことをしていることを示すために `添付ファイル」を指定することができ、その の表示は自動であってはならず、ユーザーの何らかの更なるアクションを条件として行わなければならない。 MUAは、 ビットマップ端末のユーザに添付ファイルのアイコン表現を表示したり、 ユーザが表示または保存用に選択できる添付ファイルのリストを文字端末上に という文字端末で提示することがあります。

だから、このようにそれを設定します。

w.Header().Set("Content-Type", resp.Header.Get("Content-Type")) 
w.Header().Set("Content-Length", resp.Header.Get("Content-Length")) 
:あなたの応答ライター wのヘッダを設定するときに、あなたが作る応答から、ではない着信要求からフィールドをコピーまた

w.Header().Set("Content-Disposition", "attachment; filename=Wiki.png") 

また、ヘッダーは"提案"のようにブラウザにであることに注意してください。これはレスポンスが保存されるファイルであることを示唆していますが、サーバー側からはレスポンスを実際にファイルに保存して表示しないよう強制することはできません。 `attachment`ない`フォーム-data`コンテンツ気質タイプを設定Golang beego output to csv file dumps the data to browser but not dump to file

+0

私のために働いていない、 私はダウンロードするためにクロムを使います。 IEの場合、デフォルトでは、ディレクトリにダウンロードを保存することができます。 ブラウザに依存していることを理解しています – cuong

+0

「私にとってはうまくいかない」---その意味を説明してください。あなたが見ているものと見たいものは何ですか? – zerkms

+0

私は、ボタンをクリックしてダウンロードした後、ダイアログを開いてファイルを保存するフォルダを選択することを期待しています。しかし、コードの実装に加えて、ブラウザのダイアログを開くための設定が必要です。ありがとうございました! – cuong

関連する問題