生成中にユーザーにファイルをダウンロードさせる方法

AlexBlake

まだ準備ができていないときに、ユーザーがファイルのダウンロードを開始できるようにしたい。「30秒待って、ファイルを準備しています」というページにユーザーを送りたくありません。事前にファイルを生成できません。ユーザーがフォームをクリック/送信し、ダウンロード場所を選択してダウンロードを開始する必要があります。生成されるファイルはzipになるので、zipの最初の数バイト(常に同じ)でファイル名を送信できるはずであり、ファイルが生成される前に、tcpパケットが正しく送信されたことなどを確認しないでください。それと、ファイルが生成された後、残りを送信します。

それ、どうやったら出来るの?それができるツールはありますか?それとももっと良い方法はありますか?より高レベルのソリューションの方が優れていますが、Cは私の強みではありません。できればPythonで。ありがとう。

生成されるファイルはzipであり、準備される前に送信するものはまだありません。基本的に、入力に応じて、ファイルを圧縮してユーザーに提供するよりも、ファイルのセットを生成します(数十秒かかります)。私のアプリケーションはLinux上のPythonですが、どのサーバーを使用するかはそれほど重要ではありません。

AlexBlake

それは不可能だという主張にもかかわらず、私はなんとか方法を見つけることができました。その間にGoを少し学んだので、それを使用しましたが、他の言語でもそれほど変わらないと思います。

基本的に、最初のバイトはライターで書き込まれ、次にフラッシュされます。休憩を待つよりもブラウザ。

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "net/http"
    "os"
    "strings"
    "time"
)

func Zip(w http.ResponseWriter, r *http.Request) {
    file_name := r.URL.Path
    file_name = strings.TrimPrefix(file_name, "/files/")

    w.Header().Set("Content-type", "application/zip")
    w.Write([]byte{80})
    if f, ok := w.(http.Flusher); ok {
        f.Flush()
    }
    for {
        if _, err := os.Stat("./files/" + file_name); err == nil {
            fmt.Println("file found, breaking")
            break
        }
        time.Sleep(time.Second)
    }
    stream_file_bytes, err := ioutil.ReadFile("./files/" + file_name)
    if err != nil {
        fmt.Println(err)
        return
    }

    b := bytes.NewBuffer(stream_file_bytes)
    b.Next(1)
    b.WriteTo(w)
    fmt.Println("end")
}

func main() {
    http.HandleFunc("/files/", Zip)
    if err := http.ListenAndServe(":8090", nil); err != nil {
        panic(err)
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ユーザーにデータをファイルにダウンロードさせる方法

分類Dev

vaadinファイルダウンローダーを使用してユーザーにzipファイルをダウンロードさせる方法

分類Dev

vaadinファイルダウンローダーを使用してユーザーにzipファイルをダウンロードさせる方法

分類Dev

vaadinファイルダウンローダーを使用してユーザーにzipファイルをダウンロードさせる方法

分類Dev

JSF / Seam:ユーザーの介入なしに動的に生成されたPDFファイルをダウンロードして印刷する方法は?

分類Dev

ユーザーのonedriveにファイルをダウンロード/アップロードする方法

分類Dev

ブラウザにファイルを強制的にダウンロードさせる方法は?

分類Dev

ユーザーにiframe要素のCSSファイルをダウンロードさせます

分類Dev

ユーザーがファイルをダウンロードできるようにする簡単な方法

分類Dev

ユーザーがクリックしたときにファイルをダウンロードする方法

分類Dev

ブラウザにロードせずにファイルをダウンロードする

分類Dev

その場で生成される非常に大きなファイルをクライアントにダウンロードさせる方法

分類Dev

Rails4-ユーザーにプロファイルのフィールドを更新させる方法は?

分類Dev

反応でダウンロード中に現在の日時にファイル名を生成する方法

分類Dev

Asp.Net Core:送信前にダウンロードされたファイルをブラウザに表示させる方法

分類Dev

UTF-8-sigcsvファイルをユーザーにダウンロードする

分類Dev

javascriptにブラウザを関与させずに、URLからファイルをダウンロードする方法

分類Dev

ファイルをダウンロードすると、ユーザーはログアウトされます

分類Dev

Chrome拡張機能にファイルをダウンロードさせる

分類Dev

Djangoにダウンロード可能なファイルを提供させる

分類Dev

ユーザーがダウンロードできるように、実行時に作成されたPDFファイルを配置する場所

分類Dev

アプリユーザーの外にAndroidアプリのダウンロードファイルを非表示にする方法

分類Dev

Azure BlobStorageからブラウザーにファイルをダウンロードする方法

分類Dev

Firefoxにファイルのダウンロードを正しく識別させる方法は?

分類Dev

VueJSにローカルに保存されたファイルをダウンロードする方法

分類Dev

ファイルのダウンロード中にユーザーの操作を防ぐ適切な方法は何ですか?

分類Dev

ダウンロードする前にファイル名を生成する

分類Dev

ユーザープロファイルをドメインからワークグループにダウングレードする

分類Dev

ファイルが別のサーバーにある場合、最初にサーバーにダウンロードせずに、ASP.NetMVCを使用してブラウザーにファイルを強制的にダウンロードする

Related 関連記事

  1. 1

    ユーザーにデータをファイルにダウンロードさせる方法

  2. 2

    vaadinファイルダウンローダーを使用してユーザーにzipファイルをダウンロードさせる方法

  3. 3

    vaadinファイルダウンローダーを使用してユーザーにzipファイルをダウンロードさせる方法

  4. 4

    vaadinファイルダウンローダーを使用してユーザーにzipファイルをダウンロードさせる方法

  5. 5

    JSF / Seam:ユーザーの介入なしに動的に生成されたPDFファイルをダウンロードして印刷する方法は?

  6. 6

    ユーザーのonedriveにファイルをダウンロード/アップロードする方法

  7. 7

    ブラウザにファイルを強制的にダウンロードさせる方法は?

  8. 8

    ユーザーにiframe要素のCSSファイルをダウンロードさせます

  9. 9

    ユーザーがファイルをダウンロードできるようにする簡単な方法

  10. 10

    ユーザーがクリックしたときにファイルをダウンロードする方法

  11. 11

    ブラウザにロードせずにファイルをダウンロードする

  12. 12

    その場で生成される非常に大きなファイルをクライアントにダウンロードさせる方法

  13. 13

    Rails4-ユーザーにプロファイルのフィールドを更新させる方法は?

  14. 14

    反応でダウンロード中に現在の日時にファイル名を生成する方法

  15. 15

    Asp.Net Core:送信前にダウンロードされたファイルをブラウザに表示させる方法

  16. 16

    UTF-8-sigcsvファイルをユーザーにダウンロードする

  17. 17

    javascriptにブラウザを関与させずに、URLからファイルをダウンロードする方法

  18. 18

    ファイルをダウンロードすると、ユーザーはログアウトされます

  19. 19

    Chrome拡張機能にファイルをダウンロードさせる

  20. 20

    Djangoにダウンロード可能なファイルを提供させる

  21. 21

    ユーザーがダウンロードできるように、実行時に作成されたPDFファイルを配置する場所

  22. 22

    アプリユーザーの外にAndroidアプリのダウンロードファイルを非表示にする方法

  23. 23

    Azure BlobStorageからブラウザーにファイルをダウンロードする方法

  24. 24

    Firefoxにファイルのダウンロードを正しく識別させる方法は?

  25. 25

    VueJSにローカルに保存されたファイルをダウンロードする方法

  26. 26

    ファイルのダウンロード中にユーザーの操作を防ぐ適切な方法は何ですか?

  27. 27

    ダウンロードする前にファイル名を生成する

  28. 28

    ユーザープロファイルをドメインからワークグループにダウングレードする

  29. 29

    ファイルが別のサーバーにある場合、最初にサーバーにダウンロードせずに、ASP.NetMVCを使用してブラウザーにファイルを強制的にダウンロードする

ホットタグ

アーカイブ