Что такое "необработанный тип исключения FileUploadException" и как я могу это исправить?

Я использую Google App Engine на Eclipse, и я хочу, чтобы пользователи могли загружать документы. Я использовал пример, приведенный в разделе Как загрузить и сохранить изображение с помощью механизма движка Google (java). Что я должен сделать, чтобы избавиться от ошибки, которая говорит "необработанный тип исключения FileUploadException" на двух строках сразу после загрузки ServletFileUpload =...

Вот точный код, который я использовал:

package com.example.test;

 import java.io.*;

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

 import org.apache.commons.**********.FileItemIterator;
 import org.apache.commons.**********.FileUploadException;
 import org.apache.commons.**********.servlet.ServletFileUpload;
 import org.apache.commons.**********.*;
 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;
 }
}
1 ответ

вам не нужно использовать ServletFileUpload. Используйте базовый блок blobstore api, предоставленный GAE.

Я считаю, что вы представляете форму, как в документах. Таким образом, на сервере,

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

Image image = ImagesServiceFactory.makeImageFromBlob(blobKeys.get(0));
</blobkey>

licensed under cc by-sa 3.0 with attribution.