La lecture de l'image à partir de la requête HTTP du corps en Aller

Je suis en train de jouer avec Go (première fois) et je veux construire un outil pour récupérer des images depuis Internet et de les couper (redimensionner) mais je suis bloqué sur la première étape.

package main

import (
  "fmt"
  "http"
)

var client = http.Client{}

func cutterHandler(res http.ResponseWriter, req *http.Request) {
  reqImg, err := client.Get("http://www.google.com/intl/en_com/images/srpr/logo3w.png")
  if err != nil {
    fmt.Fprintf(res, "Error %d", err)
    return
  }
  buffer := make([]byte, reqImg.ContentLength)
  reqImg.Body.Read(buffer)
  res.Header().Set("Content-Length", fmt.Sprint(reqImg.ContentLength)) /* value: 7007 */
  res.Header().Set("Content-Type", reqImg.Header.Get("Content-Type")) /* value: image/png */
  res.Write(buffer)
}

func main() {
  http.HandleFunc("/cut", cutterHandler)
  http.ListenAndServe(":8080", nil) /* TODO Configurable */
}

Je suis en mesure de demander une image (utilisons le logo Google) et de son type et de la taille.

En effet, je suis tout simplement ré-écriture de l'image (regardez cela comme un jouet "proxy"), réglage de Longueur et de Type de Contenu et l'écriture de l'octet de la tranche arrière, mais je me trompe quelque part. Voir à quoi il ressemble à l'image finale rendue sur Chrome 12.0.742.112 (90304):

La lecture de l'image à partir de la requête HTTP du corps en Aller

Aussi j'ai vérifié le fichier téléchargé et c'est un 7007 octets image PNG. Il devrait fonctionner correctement si l'on regarde la demande:

OBTENIR un couper /HTTP/1.1

User-Agent: curl/7.22.0 (i486-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.0 e zlib/1.2.3.4 libidn/1.23 libssh2/1.2.8 librtmp/2.3

Host: 127.0.0.1:8080

Accepter: /

HTTP/1.1 200 OK

Content-Length: 7007

Content-Type: image/png

Date: tue, 27 Dec 2011 19:51:53 GMT

[PNG données]

Ce que vous pensez que je fais mal ici?

Disclaimer: je suis de rayer mon propre démangeaisons, donc probablement que je suis en utilisant le mauvais outil 🙂 de toute façon, je peux la mettre en œuvre sur Ruby, mais avant je voudrais faire Passer un essai.

Mise à jour: toujours se gratter les démangeaisons, mais... je pense que ça va être du bon côté de côté projet, donc je suis à l'ouverture, il https://github.com/imdario/go-lazor Si il n'est pas utile, au moins quelqu'un peut trouver une utilité avec les références utilisées pour la développer. Ils étaient pour moi.