2016-02-05 155 views
2

我有一个本地golang服务器,其端点侦听POST请求,解码请求的正文并保留它。这工作时,我手动卷曲端点就像在POST请求中将图像附加到golang服务器

curl -X POST localhost:8080/newimage --data-binary "PATH" 

但是,我无法成功上传在通过GUI我工作的一个POST请求的文件。我正在使用https://github.com/okonet/react-dropzone删除File并将其附加到FormData对象,但golang服务器似乎没有收到填充的正文。

这是我如何创建AJAX查询:

formData = new FormData(); 
    formData.append("image", file) 
    $.ajax({ 
     url: "http://localhost:8080/items/81d648b0-25f9-434e-9129-fe52575865dd/newimage", 
     type: "POST", 
     data: formData, 
     processData: false 
    }).done(function(res) { 
     console.log(res); 
    }); 

和后端服务器:

func (h *ItemHandler) PostImage(resp http.ResponseWriter, req *http.Request) { 
vars := mux.Vars(req) 
itemID := vars["id"] 
assetID := newAssetID() 

// verify image 
img, _, err := image.Decode(req.Body) 
if err != nil { 
    log.Printf("could not decode body into an image") 
    resp.Header().Add("Access-Control-Allow-Origin", "*") 
    resp.WriteHeader(http.StatusBadRequest) 
    resp.Write([]byte("could not decode body image")) 
    return 
} 

将不胜感激的任何建议。

+0

也许问题是关系到'被设置为'应用内容Type'头/ x-www-form-urlencoded“。尝试将其更改为'application/octet-stream'。 – hindmost

+0

Go从来没有这样做过,但是你应该解码请求数据的'image'字段吗?身体可能不包含有效的图像...更像'image = YourImageEncodingData' – Elwinar

+0

您只检查'err!= nil',但_what is_错误? 'error'不仅仅是一个'bool'类型(是'nil'或者非'nil')... – icza

回答

0

FormData与以原始字节发送图像大不相同。 这里是如何从一个多/表单数据请求获取文件的示例:

func (h *ItemHandler) PostImage(resp http.ResponseWriter, req *http.Request) { 
    vars := mux.Vars(req) 
    itemID := vars["id"] 
    assetID := newAssetID() 

    file, _, err := req.FormFile("image") 
    if err != nil{ 
    log.Print(err) 
    resp.WriteHeader(http.StatusBadRequest) 
    return 
    } 

    // verify image 
    img, _, err := image.Decode(file) 
    if err != nil { 
    log.Printf("could not decode body into an image") 
    resp.Header().Add("Access-Control-Allow-Origin", "*") 
    resp.WriteHeader(http.StatusBadRequest) 
    resp.Write([]byte("could not decode body image")) 
    return 
    } 
    ... 
} 

https://golang.org/pkg/net/http/#Request.FormFile

相关问题