Как отправить изображение в формате jpeg.Encode? - PullRequest
1 голос
/ 04 апреля 2020

Я создаю картинку с помощью jpeg.Encode и хочу отправить ее. Как избежать создания промежуточного файла?

Создание и сохранение файла.

  // ...
  outFile, err := os.Create("./images/" + name + ".jpg")
  if err != nil {
    log.Fatal(err)
    os.Exit(-1)
  }
  defer outFile.Close()
  buff := bufio.NewWriter(outFile)

  err = jpeg.Encode(buff, background, &jpeg.Options{Quality: 90})
  if err != nil {
    log.Fatal(err)
    os.Exit(-1)
  }

  err = buff.Flush()
  if err != nil {
    log.Fatal(err)
    os.Exit(-1)
  }

Отправка файла.

  file, err := os.Open("./images/" + name + ".jpg")
  if err != nil {
    log.Fatal(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()

Как отправить фотографию без ее сохранения? на сервере?

1 Ответ

1 голос
/ 04 апреля 2020

Просто передайте цель part на jpeg.Encode():

// ...

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

err = jpeg.Encode(part, background, &jpeg.Options{Quality: 90})
if err != nil {
    return nil, err
}
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()
...