view pkg/misc/http.go @ 2613:2ee6c32f1ba6

client: fix UI for URL/file import settings Make the style of the toggle button setting for `URL` similiar to the used default stale for `file` in the `Import via` setting which is used for configuring a number of imports. So users can see that both settings of the toggle button can lead to a valid configuration.
author Bernhard Reiter <bernhard@intevation.de>
date Wed, 13 Mar 2019 12:31:52 +0100
parents 4d6979dedb11
children 9cbed444b8a4
line wrap: on
line source

// This is Free Software under GNU Affero General Public License v >= 3.0
// without warranty, see README.md and license for details.
//
// SPDX-License-Identifier: AGPL-3.0-or-later
// License-Filename: LICENSES/AGPL-3.0.txt
//
// Copyright (C) 2018 by via donau
//   – Österreichische Wasserstraßen-Gesellschaft mbH
// Software engineering by Intevation GmbH
//
// Author(s):
//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>

package misc

import (
	"bufio"
	"io"
	"io/ioutil"
	"net/http"
	"os"
	"path/filepath"

	"gemma.intevation.de/gemma/pkg/config"
)

func StoreUploadedFile(req *http.Request, field, fname string, maxSize int64) (string, error) {

	// Check for direct upload.
	f, _, err := req.FormFile(field)
	if err != nil {
		return "", err
	}
	defer f.Close()

	dir, err := ioutil.TempDir(config.TmpDir(), field)
	if err != nil {
		return "", err
	}

	o, err := os.Create(filepath.Join(dir, fname))
	if err != nil {
		os.RemoveAll(dir)
		return "", err
	}

	out := bufio.NewWriter(o)

	if _, err = io.Copy(out, io.LimitReader(f, maxSize)); err != nil {
		o.Close()
		os.RemoveAll(dir)
		return "", err
	}

	if err = out.Flush(); err != nil {
		o.Close()
		os.RemoveAll(dir)
		return "", err
	}

	return dir, nil
}