1

blobstore upload form JSPを使用してページを デザインしているときに、非常に珍しい問題に直面していますjQuery Mobile 1.3.0。以下にコードを掲載しています。

<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory"%>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService"%>
<head>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.css" />
<link rel="stylesheet" href="/css/common.css" />
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
</head>
<body>
 <%
   BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
 %>
 <form method="POST" action="<%=blobstoreService.createUploadUrl("/upload")%>"
  id="uploadImageForm" enctype="multipart/form-data">
    <label for="newsTitle">New Title</label>
    <input type="text" name="newsTitle" id="newsTitle" placeholder="Please enter some title" />
    <div style="clear: both; width: 100%;"></div>

    <label for="newsDescription">New Description</label>
    <textarea name="newsDescription" id="newsDescription" placeholder="Please enter some description" rows="10"></textarea>
    <div style="clear: both; width: 100%;"></div>

    <label for="newsPic">Choose Image (if any)</label>
    <input type="file" name="newsPic" id="newsPic" class="newsPic" />
    <div style="clear: both; width: 100%; height: 10px;"></div>

    <input type="submit" name="submit" data-role="button" data-inline="true" value="Submit" />
  </form>
</body>

このフォームからブロブストアにファイルをアップロードしようとすると、この例外が発生します。

WARNING: Error for /_ah/upload/agpsdW1paW5uZXdzchsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YOAw
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:71)
at javax.mail.internet.MimeMultipart.readTillFirstBoundary(MimeMultipart.java:245)
at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:181)
at javax.mail.internet.MimeMultipart.getCount(MimeMultipart.java:109)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.handleUpload(UploadBlobServlet.java:146)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.access$000(UploadBlobServlet.java:69)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet$1.run(UploadBlobServlet.java:112)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.doPost(UploadBlobServlet.java:109)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:110)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)

通常のcssとjqueryライブラリを使用して単純なJSPページを使用してアップロードしようとすると、すべて正常に機能します。

<%@ page
import="com.google.appengine.api.blobstore.BlobstoreServiceFactory"%>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService"%>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>News App : Upload New News</title>

 <link href="/bootstrap/css/bootstrap-responsive.css" type="text/css"
rel="stylesheet" />
 <link href="/bootstrap/css/bootstrap.css" type="text/css"
rel="stylesheet" />
 <script src="http://code.jquery.com/jquery-1.8.2.min.js"
type="text/javascript"></script>
 <script src="/bootstrap/js/bootstrap.js" type="text/javascript"></script>
</head>
<body>
<%
    BlobstoreService blobstoreService = BlobstoreServiceFactory
            .getBlobstoreService();
%>
<div class="container-fluid">
    <div class="row-fluid">
        <div class="span1"></div>
        <div class="span10">
            <ul class="nav nav-tabs">
                <li><a href="/">Home</a></li>
                <li class="active"><a href="/newpost">Post New Topic</a></li>
            </ul>
            <form method="POST"
                action="<%=blobstoreService.createUploadUrl("/upload")%>"
                id="uploadImageForm" enctype="multipart/form-data">
                <fieldset>
                    <legend class="text-info">Upload Form</legend>
                    <label for="newsTitle">News Title</label> <input type="text"
                        name="newsTitle" id="newsTitle" class="span12"
                        placeholder="Type some title..." />
                    <div class="clear"></div>
                    <label for="newsDescription">News Description</label>
                    <textarea class="textarea span12" name="newsDescription"
                        id="newsDescription" placeholder="Type some description..."
                        style="height: 70px;"></textarea>
                    <div class="clear"></div>
                    <label for="newsPic">Choose Picture</label> <input type="file"
                        name="newsPic" id="newsPic" placeholder="Type some title..." />
                    <div class="clear"></div>
                    <input type="submit" class="btn btn-success" value="Submit" />
                </fieldset>
            </form>
        </div>
        <div class="span1"></div>
    </div>
</div>

なぜこの問題が発生しているのか理解できません。あなたの提案が必要です。

4

2 に答える 2

2
于 2013-02-23T20:40:01.840 に答える
1

Tolisがこれについて答えを持っているのではないかと思うので、「私はあなたの提案が必要です」の部分を撮影します。

これは、失敗を可能な限り最小のテストケース(または少なくともこれよりも小さいテストケース)に減らすのに本当に役立つ種類の問題です。これはいくつかの点で役立ちます。まず、他の方法では見つけにくいタイプミスが発生することがよくあります。(誤って「multipart / form-date」と入力するたびにニッケルを持っていた場合...しかし、余分な雑然としたものがたくさんある場合、それを見つけるのは困難です。)

第二に、気を散らすものを排除することで、関係のないものを渡してあなたを助けようとしている人々を助けます。

第三に、バグを見つけた場合、単純なテストケースにより、バグが迅速に修正される可能性が大幅に向上します。

この特定のケースでは、私はあなたが見ている行動のどちらかspringまたは何かcssと関係があることを真剣に疑っています。ファイル以外の入力フィールドも、表示されている動作を変更しない限り、移動する可能性があります。

于 2013-02-24T04:02:52.703 に答える