GAE/J - Blobstore - 如何确定文件是否未上传

Jag*_*ish 3 google-app-engine

我正在开发Web应用程序并使用GAE/J blobstore教程http://code.google.com/appengine/docs/java/blobstore/overview.html我能够将文件上传到blobstore.

我的问题是我的"上传文件"选项在表格上是可选的.因此,用户可能会或可能不会选择在我的表单上上传文件.因此,由于此字段是可选的,我没有对此字段进行任何前期表单验证,但是当我提交表单"带有0kb文件的空白文档上传到blobstore"时,因为我无法确定用户是否已选择任何文件与否在servlet中.

我尝试过Apache文件上传(ServletFileUpload..etc)但每次都保持返回null.

所以不确定,我如何确定用户是否选择了要在servlet中上传的文件?

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

小智 8

您可以通过检查blob的大小来测试是否上传了blob.如果大小为零,则应删除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);
}
Run Code Online (Sandbox Code Playgroud)

  • 太好了,谢谢你这有帮助..虽然不知何故对我来说blobInfo.getSize返回> 0 ..所以我最终也得到了blobInfo.getFilename()的文件名..如果没有上传文件,它的长度总是为零.if(fileName.length()<= 0){blobstoreService.delete(blobkey); } (2认同)

Ash*_*der 5

在开发环境中,如果用户提交的表单上传的文件为空,则blobkey将为null,但在生产环境中,blobkey将为非null,blob将为空。因此,您应该检查这两种情况。