मैं अपलोड करने वाली फ़ाइलों को अनुमति देना चाहता हूं। अनुरोधों को संभालने के लिए जाओ सर्वर-साइड का उपयोग किया जा रहा है। जब भी वे अपलोड करने का प्रयास कर रहे हैं, तो वे "बहुत बड़ी फ़ाइल" प्रतिक्रिया भेजना चाहेंगे, जो बहुत बड़ी है। मैं ऐसा करना चाहता हूं, से पहले पूरी फ़ाइल अपलोड की गई है (बैंडविड्थ)।गोलांग फ़ाइल अपलोड: फ़ाइल बहुत बड़ी है तो बंद कनेक्शन
मैं निम्नलिखित स्निपेट का उपयोग कर रहा हूं, लेकिन क्लाइंट अपलोड होने के बाद ही यह प्रतिक्रिया भेज रहा है। यह 5 केबी फाइल बचाता है।
const MaxFileSize = 5 * 1024
// This feels like a bad hack...
if r.ContentLength > MaxFileSize {
if flusher, ok := w.(http.Flusher); ok {
response := []byte("Request too large")
w.Header().Set("Connection", "close")
w.Header().Set("Content-Length", fmt.Sprintf("%d", len(response)))
w.WriteHeader(http.StatusExpectationFailed)
w.Write(response)
flusher.Flush()
}
conn, _, _ := w.(http.Hijacker).Hijack()
conn.Close()
return
}
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize)
err := r.ParseMultipartForm(1024)
if err != nil {
w.Write([]byte("File too large"));
return
}
file, header, err := r.FormFile("file")
if err != nil {
panic(err)
}
dst, err := os.Create("upload/" + header.Filename)
defer dst.Close()
if err != nil {
panic(err)
}
written, err := io.Copy(dst, io.LimitReader(file, MaxFileSize))
if err != nil {
panic(err)
}
if written == MaxFileSize {
w.Write([]byte("File too large"))
return
}
w.Write([]byte("Success..."))
ट्रिकी। हो सकता है कि आप 'MaxFileSize + 1' बाइट्स को पढ़ने के लिए io.CopyN का उपयोग कर सकें। अगर 'गलती! = ईओएफ', सीमा पार हो गई थी या कुछ और समस्या थी। मुझे यकीन नहीं है कि ब्राउज़र में उपयोगकर्ता क्या व्यवहार करेगा यदि आप ऐसा करते हैं, हालांकि - इसे आज़माएं और देखें। साथ ही, मैं समझता हूं कि यह परीक्षण कोड है, लेकिन 'पैनिक से त्रुटि रिटर्न में स्विचिंग आपके उत्पादन कोड के लिए एक अच्छा विचार है। – twotwotwo
सुझाव के लिए धन्यवाद। 'CopyN' के साथ 'कॉपी' को प्रतिस्थापित करना और 'MaxFileSize + 1' बाइट्स पढ़ने से मदद नहीं मिली (ब्राउज़र अंत में)। पैनिक्स के रूप में, मेरे पास आमतौर पर एक विशेष 'रिकवर हैंडलर' होता है, जो पैनिक्स से ठीक हो जाता है और परिणामस्वरूप एक अच्छी त्रुटि 400 पेज होती है। हालांकि ध्यान देने के लिए धन्यवाद। –