0

我在常规表单提交中使用了带有 JAVA GAE 的 blobstore 方法

<form id="myform" action="<%= blobstoreService.createUploadUrl("/saveform") %>" method="post" enctype="multipart/form-data">
<input type="file" id="logo" name="logo"/>

当我提交表单时,它按预期工作。图像保存到 blobstore,我有密钥/url。

当我尝试将此表单转换为 ajax 表单时,通过添加以下内容失败。

$.ajax({
  'type' : 'POST',
  'url' : $("#myform").attr('action'), 
  'data': $("#myform").serialize()})
.done(function (msg){
  if (msg!="1") {
    $("#errors").empty().append("<p class='error'>" + msg + "</p>");
    return false;
  }
});

我在控制台中收到以下错误。加载资源失败:服务器响应状态为 500(Java 堆空间)http:///_ah/upload/aglub19hcHBfaWRyGwsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxgnDA

在eclipse中我得到警告:/_ah/upload/aglub19hcHBfaWRyGwsSFV9fQmxvYlVwbG9hZFNlc3Npb25fXxgnDA java.lang.OutOfMemoryError:Java堆空间错误

有什么建议么?

4

1 回答 1

3

这是因为您将数据作为 $("#myform").serialize() 发送,这会产生问题。在这种情况下,您的 contentType 不是“multipart/form-data”,而是“application/x-www-form-urlencoded”。您必须使用类似以下的内容...

$.ajax({
   url : blobUrl,
   type : 'POST',
   cache : false,
   data : new FormData($("#myForm")[0]),
   processData : false,
   contentType : false,
   success : function(data) {
        console.log("Success!!!");
    }
});

由于 blobstore 允许二进制数据,并且此方法中的内容类型将为 multipart/form-data,(您可以在 chrome 开发人员控制台的“网络”选项卡中检查)它会起作用,试试这个。

希望这会有所帮助,谢谢。

于 2014-02-27T08:44:20.027 回答