2012-03-12 3 views
2

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

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

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

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

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

ответ

7

Вы можете проверить, если капля была загружена, проверив размер блоб. Если размер равен нулю, вы должны удалить 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); 
} 
+2

Отлично, спасибо, это помогает .. хотя как-то для меня blobInfo.getSize возвращает> 0 .. поэтому я тоже получал имя файла blobInfo.getFilename() .. и длина всегда равна нулю, если файл не загружен. if (fileName.length() <= 0) {blobstoreService.delete (blobkey); } – Jagdish

1

FYI это может быть полезно для вас, чтобы показать ваш код.

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

Для специфики, как получить этот список загруженных сгустков см this section документации, но в основном вы собираетесь сделать этот призыв:

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

Если эта карта пуста, там не были загружены капли.

+0

Я обновил код выше в разделе вопросов. И у меня есть условие, чтобы проверить, имеет ли значение null или больше нуля, но он загружает пустой «(неназванный)» документ типа контента «application/octet-stream» и создает ключ. Возможно, я не понимаю этот пример или не правильно проверяю это условие. – Jagdish

+0

Я не уверен, что вам сказать. Это отлично работает для меня. Когда я не загружаю файл, размер карты равен нулю. – csturtz

1

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

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

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

    return url; 
+0

Спасибо, Дэвид, это тоже полезный совет. – Jagdish

4

В среде Dev, если пользователь отправляет форму с пустой загрузки файла, BlobKey будет нулевым, но в производстве будет ненулевым и блоб будет пустым. Поэтому вы должны проверить оба сценария.

+1

Точно!Об этом вчера я упомянул, развернув приложение. На моей локальной машине ключи не выбранного файла были пусты. Жаль, что никакой официальной документации о –

Смежные вопросы