Handle situation when there's not enough space left.
This commit is contained in:
parent
efd83144c4
commit
c6aed4b67f
@ -105,6 +105,7 @@ func (h *UploadHandlers) Index(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
||||||
var fMaxSizeBytes int64 = h.conf.Uploads.Limits.FileSize << 20
|
var fMaxSizeBytes int64 = h.conf.Uploads.Limits.FileSize << 20
|
||||||
|
var storCapacity int64 = h.conf.Uploads.Limits.Storage << 20
|
||||||
|
|
||||||
r.Body = http.MaxBytesReader(w, r.Body, fMaxSizeBytes)
|
r.Body = http.MaxBytesReader(w, r.Body, fMaxSizeBytes)
|
||||||
|
|
||||||
@ -125,6 +126,19 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
f.Close()
|
f.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
var leftSpace int64 = storCapacity - *h.uploadDirSize
|
||||||
|
|
||||||
|
if leftSpace < fHandler.Size {
|
||||||
|
h.logErr.Println("not enough space left in storage, only", leftSpace>>20, "MiB left")
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
if err := compiledTemplates["uploaded"].Execute(w, &NotFoundData{
|
||||||
|
MainSite: utils.MainSite(r.Host),
|
||||||
|
}); err != nil {
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
h.logErr.Fatalln("failed to execute NoSpace template:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
s256 := sha256.New()
|
s256 := sha256.New()
|
||||||
if _, err := io.Copy(s256, f); err != nil {
|
if _, err := io.Copy(s256, f); err != nil {
|
||||||
h.logErr.Println("failed to compute SHA-256 hash:", err)
|
h.logErr.Println("failed to compute SHA-256 hash:", err)
|
||||||
@ -192,7 +206,7 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
KeepForHours: h.conf.Uploads.Limits.KeepForHours,
|
KeepForHours: h.conf.Uploads.Limits.KeepForHours,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
h.logErr.Fatalln("failed to execute Index template:", err)
|
h.logErr.Fatalln("failed to execute Uploaded template:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,4 +290,16 @@ func compileTemplates(lErr *logging.Logger) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compiledTemplates["404"] = notfoundTpl
|
compiledTemplates["404"] = notfoundTpl
|
||||||
|
|
||||||
|
nospaceStr, err := jade.ParseFileFromFileSystem("nospace.jade", templatesFS)
|
||||||
|
if err != nil {
|
||||||
|
lErr.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
nospaceTpl, err := template.New("nospace").Parse(nospaceStr)
|
||||||
|
if err != nil {
|
||||||
|
lErr.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
compiledTemplates["nospace"] = nospaceTpl
|
||||||
}
|
}
|
||||||
|
18
internal/handlers/web/templates/nospace.jade
Normal file
18
internal/handlers/web/templates/nospace.jade
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
extends base.jade
|
||||||
|
|
||||||
|
block head
|
||||||
|
style(type="text/css").
|
||||||
|
#error {
|
||||||
|
font-size: 3.5rem;
|
||||||
|
line-height: 5rem;
|
||||||
|
text-align: center;
|
||||||
|
margin: 6rem 0; }
|
||||||
|
|
||||||
|
#error h1 { font-size: 6rem; }
|
||||||
|
|
||||||
|
block header
|
||||||
|
h1 :(
|
||||||
|
|
||||||
|
block body
|
||||||
|
section#error
|
||||||
|
h1 Not enough space left
|
Loading…
Reference in New Issue
Block a user