Я работаю над веб-приложением Grails и мне нужно загрузить файлы.
У меня есть форма (здесь упрощенно):
<g:form action="save" method="post" enctype="multipart/form-data">
<input type="file" id="image" name="image" />
<input class="save" type="submit" value="Create" />
</g:form>
и в коде контроллера (я знаю, что это не должно быть в контроллере, но это просто для того, чтобы он работал и чем он будет лучше спроектирован):
def save = {
GaeVFS.setRootPath( servletContext.getRealPath( "/" ) );
FileSystemManager fsManager = GaeVFS.getManager();
FileObject tmpFolder = fsManager.resolveFile( "gae://WEB-INF/upload_files" );
if ( !tmpFolder.exists() ) {
tmpFolder.createFolder();
}
//I NEED CODE HERE TO SAVE THE IMAGE IN THE BIGTABLE VIA GAEVFS
}
Итак, у меня две проблемы:
A. При нажатии кнопки «Сохранить» создается исключение get, поскольку он пытается использовать Apache Commons FileUpload, который пытается сохранить файл в файловой системе.
Как это отключить?
Исключение составляют:
java.lang.NoClassDefFoundError: java.rmi.server.UID является ограниченным классом. Подробнее см. В руководстве разработчика Google App Engine.
на com.google.appengine.tools.development.agent.runtime.Runtime.reject (Runtime.java:51)
на org.apache.commons.fileupload.disk.DiskFileItem. (DiskFileItem.java:103)
на org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem (DiskFileItemFactory.java:196)
в org.apache.commons.fileupload.FileUploadBase.parseRequest (FileUploadBase.java:358)
B. Мне нужен пример кода для сохранения изображения через gaevfs
Я видел пример в GaeVfsServlet, но я до сих пор не знаю, как именно это должно выглядеть в моем случае. Любая помощь приветствуется.
URL-адрес GaeVfsServlet: http://code.google.com/p/gaevfs/source/browse/trunk/src/com/newatlanta/appengine/servlet/GaeVfsServlet.java