【问题标题】:What does "unhandled exception type FileUploadException" and how can I fix this?“未处理的异常类型 FileUploadException”是什么,我该如何解决?
【发布时间】:2014-10-15 19:17:31
【问题描述】:

我在 Eclipse 上使用 Google App Engine,我希望用户能够上传文档。我使用了How to upload and store an image with google app engine (java) 上给出的示例。我应该怎么做才能摆脱在 ServletFileUpload upload = ... 之后的两行上显示“未处理的异常类型 FileUploadException”的错误=...

这是我使用的确切代码:

    package com.example.test;

    import java.io.*;

    import javax.jdo.PersistenceManager;
    import javax.jdo.PersistenceManagerFactory;
    import javax.servlet.http.*;

    import org.apache.commons.fileupload.FileItemIterator;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.fileupload.*;
    import org.apache.commons.io.IOUtils;

    import com.google.appengine.api.datastore.Blob;


    @SuppressWarnings("serial")
    public class TestServlet extends HttpServlet {
            public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException {                
                // Get the image representation
                ServletFileUpload upload = new ServletFileUpload();
                FileItemIterator iter = upload.getItemIterator(req);
                FileItemStream imageItem = iter.next();
                InputStream imgStream = imageItem.openStream();

                // construct our entity objects
                Blob imageBlob = new Blob(IOUtils.toByteArray(imgStream));
                MyImage myImage = new MyImage(imageItem.getName(), imageBlob);

                // persist image
                PersistenceManager pm = PMF.get().getPersistenceManager();
                pm.makePersistent(myImage);
                pm.close();

                // respond to query
                res.setContentType("text/plain");
                res.getOutputStream().write("OK!".getBytes());
            }
        }

MyImage.java: 包 com.example.test;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import javax.persistence.Entity;

import com.google.appengine.api.datastore.Blob;

@Entity
public class MyImage {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String name;

    @Persistent
    Blob image;

    public MyImage() { }
    public MyImage(String name, Blob image) {
        this.name = name; 
        this.image = image;
    }

    // JPA getters and setters and empty contructor
    // ...
    public Blob getImage()              { return image; }
    public void setImage(Blob image)    { this.image = image; }
}

还有 PMF.java:

package com.example.test;

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;

public final class PMF {
    private static final PersistenceManagerFactory pmfInstance =
        JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private PMF() {}

    public static PersistenceManagerFactory get() {
        return pmfInstance;
    }
} 

【问题讨论】:

  • 您在哪里处理身份验证?
  • @PatrickCollins 我创建了两个类;一个叫做 PMF.java,另一个是 MyImage.java,这是身份验证发生的地方。我想这就是你问题的答案。我对这一切都很陌生,所以希望我和你在同一页上。
  • 我敢打赌,您的身份验证不正确。
  • @PatrickCollins,为清楚起见,我将这两个 java 文件代码都添加到主要问题中,以便您也可以看到它。

标签: java google-app-engine file-upload


【解决方案1】:

您不需要使用ServletFileUpload。使用 GAE 提供的核心 blobstore api。

我认为您正在像文档中一样提交表单。所以在服务器中,

List<BlobKey> blobKeys  =   BlobstoreServiceFactory.getBlobstoreService().getUploads(request).get("file tag's name attribute value");

Image image             =   ImagesServiceFactory.makeImageFromBlob(blobKeys.get(0));

【讨论】:

  • 所以您建议完全删除所有包含 ServletFileUpload 的行? @巴拉特
  • 是的,我使用 Blobstore Api 超过 1 年。它也支持多个文件上传。
  • 如果我摆脱 ServletFileUpload upload = new ServletFileUpload();那么上传将是未定义的。不知道该怎么做,因为我不熟悉这个。 @巴拉特
  • 不需要这些类。答案中的两行代码足以从请求中获取图像。在 getUploads 方法中传递 HTTPservletrequest
  • 我需要创建方法还是有其他方法来传递 HTTPServletRequest?
猜你喜欢
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 2022-12-05
  • 2016-07-04
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多