一度ファイルを作成してから、S3へ配置します。
(ストリームのままS3へ保存する方法教えてください!)

// download file
response, err := http.Get(url)
if err != nil {
  return fmt.Errorf("download error: %s - %s", url, err)
}
defer response.Body.Close()

// create file
output, err := os.Create(filename)
if err != nil {
  return fmt.Errorf("file create error: %s - %s", filename, err)
}
defer output.Close()

// copy
n, err := io.Copy(output, response.Body)
if err != nil {
  return fmt.Errorf("file copy error: %s - %s", filename, err)
}

cli := s3.New(session.New(), aws.NewConfig().WithRegion("ap-northeast-1"))

input := &s3.PutObjectInput{
  Body:   output,
  Bucket: aws.String("bucket-name"),
  Key:    aws.String("filename"),
}
if _, err := cli.PutObject(input); err != nil {
  return fmt.Errorf("put object error: %s", err)
}

// delete file
if err := os.Remove(filename); err != nil {
  return fmt.Errorf("file delete error: %s - %s", filename, err)
}

fmt.Printf("download from %s -> %s (%dbytes)\n", url, filename, n)