【问题标题】:How to send jpeg.Encode image?如何发送 jpeg.Encode 图像?
【发布时间】:2020-04-04 20:51:13
【问题描述】:

我正在使用 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()

如何在不保存在服务器上的情况下发送照片?

【问题讨论】:

    标签: image http go multipart


    【解决方案1】:

    只需将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()
    

    【讨论】:

    • 我试过了,还是不行。一个空的照片字段来到服务器``` body := &bytes.Buffer{} writer := multipart.NewWriter(body) defer writer.Close() part, err := writer.CreateFormFile("photo", photo.Name ()) if err != nil { log.Fatalf("%s", err) } err = jpeg.Encode(part, background, &jpeg.Options{Quality: 90}) if err != nil { log.Fatal( err) os.Exit(-1) } resp, err = http.Post(req.Response.UploadURL, writer.FormDataContentType(), body) if err != nil { log.Fatalf("%s", err) }推迟 resp.Body.Close() ```
    • @ИринаВоробьёва 是的,我忘了关闭writer。请参阅编辑后的答案。
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多