you_are_enot
@you_are_enot
Пограммист любитель

Как загрузить фото на сервер?

Возможно ли сразу отправить картинку на удалённый сервер, без создания промежуточного файла?

// Создание и сохранение картинки.
bg := image.NewRGBA(img.Bounds())
// ...
outFile, err := os.Create("./images/" + name + ".jpg")
	if err != nil {
		log.Fatalf("Не удолось создать файл: %s", err)
		os.Exit(-1)
	}
	defer outFile.Close()
	buff := bufio.NewWriter(outFile)

	err = jpeg.Encode(buff, background, &jpeg.Options{Quality: 90})
	if err != nil {
		log.Fatalf("Не удолось декодировать картинку: %s", err)
		os.Exit(-1)
	}

	err = buff.Flush()
	if err != nil {
		log.Fatalf("Не удолось сохранить в файл: %s", err)
		os.Exit(-1)
	}


// Отправка на сервер в формате multipart/form-data
file, err := os.Open("./images/photo.jpg")
	if err != nil {
		log.Fatalf("Не удалось загрузить изображение: %s", err)
	}

        body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)

	part, err := writer.CreateFormFile("photo", file.Name())
	if err != nil {
		return nil, err
	}

	io.Copy(part, file)
	if err = writer.Close(); err != nil {
		return nil, err
	}

	resp, err := http.Post(uploadURL, writer.FormDataContentType(), body)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Стандартная практика в любом языке использовать поток в памяти.
ТО есть вместо сохранения вы просто пишете в буфер, и этот буфер подсовываете декодеру, а результат отдаете дальше
https://medium.com/learning-the-go-programming-lan...
Ответ написан
@12rbah
Как вариает можно передавать через TCP по ссылке приведена реализация передачи файла по данному протоколу https://yanzay.com/post/go_netcat_files/.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы