3

Javascript代码:

$http({
    method: 'POST',
    url: 'some/path',
    headers: { 'Content-Type': false },
    transformRequest: function (data) {
      var formData = new FormData();
      formData.append("file", data);
      return formData;
    },
    data: file
}).
success(function (data, status, headers, config) {
    alert("success!");
}).
error(function (data, status, headers, config) {
    alert("failed!");
});

服务器代码:

func addImageHandler(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    blobs, _, err := blobstore.ParseUpload(r)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    file := blobs["file"]
    ....
}

我很好地处理了处理程序,但是当我解析上传时,我的 blobs 映射中没有任何文件。有什么明显的我失踪了吗?

谢谢!

4

2 回答 2

0

好像你的 Content-Type 是错误的,它应该是 multipart-form 等。

headers: { 'Content-Type': false },

确保表单具有如下字段类型:

<input type="file" />

最后确保

len(blobs["file"]) != 0

如果是,则很可能意味着浏览器没有以正确的格式发送数据,并且 appengine 没有识别它。使用 Chrome 开发者工具检查试图发送的 ajax 调用是什么。

这是一个很好的 angularjs 小部件上传数据的小提琴:http: //jsfiddle.net/CPsRs/

于 2013-06-27T22:41:42.013 回答
0

问题已证明是原始问题中未包含的细节。您需要确保使用 blobstore 来生成上传 url。例如:

func ServeUploadUrl(w http.ResponseWriter, request *http.Request) {
    context := appengine.NewContext(request)
    myUrl := "some/upload/url"

    // create the blobstore url here
    blobstore.UploadURL(context, myUrl, nil)
    ...
}
于 2013-06-28T01:32:43.293 回答