in uploadhandler.go [37:73]
func writeOutData(fullpath string, maybeRange *helpers.RangeHeader, content io.Reader) (int64, error) {
dirpath := path.Dir(fullpath)
if _, err := os.Stat(dirpath); os.IsNotExist(err) {
log.Printf("INFO Uploadandler.writeOutData target path %s does not exist, creating", dirpath)
mkDirErr := os.MkdirAll(dirpath, 0775)
if mkDirErr != nil {
log.Printf("ERROR UploadHandler.writeOutData could not create directory %s: %s", dirpath, mkDirErr)
return -1, mkDirErr
}
}
//FIXME: this over-writes an existing file
openFlags := os.O_WRONLY
if maybeRange != nil && maybeRange.IsFirst() {
openFlags |= os.O_CREATE | os.O_TRUNC
}
f, openErr := os.OpenFile(fullpath, openFlags, 0664)
if openErr != nil {
log.Printf("ERROR UploadHandler.writeOutData could not open %s to write: %s", fullpath, openErr)
return -1, openErr
}
defer f.Close()
if maybeRange == nil || maybeRange.IsComplete() {
log.Printf("INFO UploadHandler.writeOutData no range so writing whole file")
return io.Copy(f, content)
} else {
_, seekErr := f.Seek(maybeRange.Start, os.SEEK_SET)
if seekErr != nil {
log.Printf("ERROR UploadHandler.writeOutData could not seek '%s': %s", fullpath, seekErr)
return -1, seekErr
}
//FIXME: check if this actually writes correctly
return io.Copy(f, content)
}
}