golangのデフォルトnet/httpパッケージを使用して作成したサーバに大きなファイルをアップロードすると、デバッグが難しくなります。アップロードのコードは次のようになります。golang net/http大容量ファイルをアップロード中、定義されていないエラー
var server = &http.Server{
Addr: ":" + Configuration.Port,
ReadTimeout: 300 * time.Second,
WriteTimeout: 300 * time.Second,
ReadHeaderTimeout: 300 * time.Second,
MaxHeaderBytes: 500000000}
http.HandleFunc("/upload/", uploadFile)
server.ListenAndServe()
最後に私が受け入れて、次のコード
func uploadFile(w http.ResponseWriter, r *http.Request) {
//Parsing the upload arguments into the values we shall be working with
r.ParseMultipartForm(5000000000000000)
file, _, err := r.FormFile("file")
//etc
を使用してファイルを解析:
uploadForm.onsubmit =() => {
const formData = new FormData(uploadForm);
const isPublic : boolean = (<HTMLInputElement>document.getElementById('public_switch')).checked;
formData.append('file', (<HTMLInputElement>document.getElementById('file')).files[0]);
formData.append('compression', (<HTMLInputElement>document.getElementById('compression')).value);
formData.append('public', String(isPublic));
const xhr = new XMLHttpRequest();
xhr.open("POST", "/upload/");
xhr.send(formData);
xhr.onreadystatechange = function() {
console.log(xhr.responseText);
}
}
私は次のように私は開始golangで書かれたサーバーを持っています
非常に説明的なエラーメッセージ "multipart:NextPart:EOF"で、 'r.FormFile( "file")'でコード自体が失敗する
ファイルの制限やタイムアウトに何らかの設定がありますが、これはgoコードまたはjavascriptで設定されていない可能性がありますか?アップロードしようとしているファイルは〜1.7GBなので、httpでサポートされている制限内にはっきりと収まります。
FormFileを掘り下げたり、リクエスト自体をキャプチャしなくても、この問題をどのようにデバッグすることができますか?コードは小さなファイル(数Mb)でうまく動作します。
「ReadTimeout」を「5分」に設定した後、タイムアウトする前に「1.7GB」ファイルを転送できますか? – Yadvendar
転送開始から約10秒以内にエラーが表示されます。私はタイムアウトが問題だと思っていないので、私はちょうど5分でそれを外に出すように設定しました。 – George
コンテンツがサーバーに送信されていないようです。サーバーを個別にテストします。 https://stackoverflow.com/a/33809474を見て試してみてください。 – jeevatkm