В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
На самом деле на этот вопрос отвечают в Приложении документация Egnine. Посмотрите пример на Пользовательские изображения Загрузки .
код HTML, внутри < form> </form>:
<input type="file" name="img"/>
код Python:
class Guestbook(webapp.RequestHandler): def post(self): greeting = Greeting() if users.get_current_user(): greeting.author = users.get_current_user() greeting.content = self.request.get("content") avatar = self.request.get("img") greeting.avatar = db.Blob(avatar) greeting.put() self.redirect('/')
Существует поток в Google Groups об этом:
С большим количеством полезного кода, то обсуждение помогло мне очень в загрузке файлов.
Если Ваше все еще наличие проблемы, проверьте использование enctype в теге form
номер:
<form encoding="multipart/form-data" action="/upload">
Да:
<form enctype="multipart/form-data" action="/upload">
Вы не можете хранить файлы, поскольку нет традиционной файловой системы. Можно только сохранить их в их собственном DataStore (в поле, определенном как BlobProperty)
в предыдущей ссылке существует пример:
class MyModel(db.Model):
blob = db.BlobProperty()
obj = MyModel()
obj.blob = db.Blob( file_contents )
В Google App Engine нет никакого хранения плоского файла. Все должно войти к Хранилище данных , который немного похож на реляционную базу данных, но не совсем.
Вы могли хранить файлы как TextProperty или атрибуты BlobProperty.
существует предел 1 МБ на записи DataStore, которые могут или не могут быть проблемой.
Лично я нашел руководство, описанное здесь , полезным при использовании среды выполнения Java с GAE. По какой-то причине, когда я пытался загрузить файл с помощью
<form action="/testservelet" method="get" enctype="multipart/form-data">
<div>
Myfile:<input type="file" name="file" size="50"/>
</div>
<div>
<input type="submit" value="Upload file">
</div>
</form>
, я обнаружил, что мой класс HttpServlet по какой-то причине не принимает форму с атрибутом enctype. Однако удаление работает, значит, я не могу загружать файлы.
Google выпустил сервис для хранения больших файлов. Взгляните на документацию по API blobstore. Если ваши файлы > 1МБ, то вам следует воспользоваться им.
.Я пробую его сегодня. Он работает следующим образом:
моя версия sdk - 1.3.x
html-страница:
<form enctype="multipart/form-data" action="/upload" method="post" >
<input type="file" name="myfile" />
<input type="submit" />
</form>
Код сервера:
file_contents = self.request.POST.get('myfile').file.read()
Я заметил странное поведение при загрузке файлов в App Engine. Когда вы отправляете следующую форму:
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="img" />
...
</form>
А затем извлекаете img
из запроса следующим образом:
img_contents = self.request.get('img')
Переменная img_contents
- это str ()
в Google Chrome, а в Firefox - в юникоде. И как вы сейчас, конструктор db.Blob ()
принимает строку и выдаст ошибку, если вы передадите строку в Юникоде.
Кто-нибудь знает, как это можно исправить?
Кроме того, я нахожу совершенно странным то, что когда я копирую и вставляю приложение «Гостевая книга» (с аватарами), оно работает отлично. Я делаю все точно так же в своем коде, но это просто не сработает. Я очень близок к тому, чтобы выдернуть волосы.