GAE / J - Blobstore - как определить, не загружен ли файл - PullRequest
3 голосов
/ 12 марта 2012

Я работаю над веб-приложением и использую учебное пособие по GAE / J. http://code.google.com/appengine/docs/java/blobstore/overview.html Мне удалось загрузить файл в Blobstore.

Моя проблема в том, что моя опция «загрузить файл» является необязательной в форме.Таким образом, пользователь может или не может загрузить файл в моей форме.Так как это поле не является обязательным, у меня нет предварительной проверки формы для этого поля, но затем, когда я отправляю форму «пустой документ с файлом 0kb загружается в хранилище BLOB-объектов», так как я не могу определить, выбрал ли пользователь какой-либофайл или нет внутри сервлета.

Я пытался загрузить файл Apache (ServletFileUpload..etc), но он каждый раз возвращает ноль.

, поэтому не уверен, как определить, выбрал ли пользователь какой-либо файл для загрузки внутри сервлета?

            Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
            if (blobs != null && blobs.size() > 0) {
                BlobKey blobkey = blobs.get("myFile");
                blobkeyStr = blobkey.getKeyString();
            }

Ответы [ 4 ]

8 голосов
/ 13 марта 2012

Вы можете проверить, был ли загружен большой двоичный объект, проверив размер большого двоичного объекта. Если размер равен нулю, вы должны удалить BLOB-объект.

BlobstoreService bs = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = bs.getUploads(req).get("blob").get(0);
final BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo(blobKey);
long size = blobInfo.getSize();
if(size > 0){
  //process blob
}else{
  bs.delete(blobKey);
}
5 голосов
/ 30 августа 2012

В среде разработчика, если пользователь отправляет форму с загрузкой пустого файла, ключ blob будет иметь значение NULL, но в производственной среде он будет отличным от NULL, а объект BLOB будет пустым.Поэтому вы должны проверить оба сценария.

1 голос
/ 13 марта 2012

Я предполагаю, что вы используете форму для отправки непосредственно на ваш URL для загрузки?Если это так, вы можете добавить код проверки в самой форме.Если они выбрали форму, выполните асинхронный запрос, чтобы получить URL для отправки.Если форма не прикреплена, отправьте другой URL-адрес, который не обрабатывает большой двоичный объект.

Так, например, когда они отправляют, если форма прикреплена, отправьте сервлету, который генерирует URL для загрузки, подобный этому:

    BlobstoreService service = BlobstoreServiceFactory
            .getBlobstoreService();
    String url = service
            .createUploadUrl("/uploadurl");

    return url;
1 голос
/ 12 марта 2012

К вашему сведению, вам может быть более полезно показать ваш код.

По сути, даже если вы загружаете файл по желанию, вам все равно необходимо отправить запрос из отправки формы через URL загрузки в интернет-магазин.Если файл был загружен, ваш обработчик загрузки, который получает контроль от GAE, сможет получить список (карту) всех BLOB-объектов.Если файл не был загружен, этот список будет пустым.Оттуда вы можете обработать оставшуюся часть отправки формы по своему выбору.

Подробнее о том, как получить этот список загруженных BLOB-объектов, см. этот раздел документации, но в основномВы собираетесь сделать этот вызов:

Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);

Если эта карта пуста, загруженные капли отсутствуют.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...