java – 将图像解压缩到blobstore中
发布时间:2020-12-15 02:29:45 所属栏目:Java 来源:网络整理
导读:在我的应用程序中,我需要执行以下操作: 1.带有图像的zip文件(仅限jpgs)和其他内容上传到BlobStore. 2.应用引擎后端应该从上传的zip读取条目,并将内部找到的所有图像保存为BlobStore作为独立文件. 我成功上传,解压缩和保存文件@ blobstore,但图像似乎被打破
在我的应用程序中,我需要执行以下操作:
1.带有图像的zip文件(仅限jpgs)和其他内容上传到BlobStore. 2.应用引擎后端应该从上传的zip读取条目,并将内部找到的所有图像保存为BlobStore作为独立文件. 我成功上传,解压缩和保存文件@ blobstore,但图像似乎被打破了. ZipInputStream zis = ...; ZipEntry entry; while ((entry =zis.getNextEntry()) !=null) { String fileName = entry.getName().toLowerCase(); if(fileName.indexOf(".jpg") != -1 || fileName.indexOf(".jpeg") != -1) { FileService fileService = FileServiceFactory.getFileService(); String mime = ctx.getMimeType(fileName);//getting mime from servlet context AppEngineFile file = fileService.createNewBlobFile(mime,fileName); boolean lock = true; FileWriteChannel writeChannel = fileService.openWriteChannel(file,lock); byte[] buffer = new byte[BlobstoreService.MAX_BLOB_FETCH_SIZE]; while(zis.read(buffer) >= 0) { ByteBuffer bb = ByteBuffer.wrap(buffer); writeChannel.write(bb); } writeChannel.closeFinally(); BlobKey coverKey = fileService.getBlobKey(file); .... } } 非常感谢你的时间! UPD:我找到了可行的解决办法,但我仍然不明白为什么第一个解决方案失败了. int read; ByteArrayOutputStream baos = new ByteArrayOutputStream(); while((read = zis.read()) >= 0) { baos.write(read); if(baos.size() == BlobstoreService.MAX_BLOB_FETCH_SIZE) { ByteBuffer bb = ByteBuffer.wrap(baos.toByteArray()); writeChannel.write(bb); baos = new ByteArrayOutputStream(); } } if(baos.size() > 0) { ByteBuffer bb = ByteBuffer.wrap(baos.toByteArray()); writeChannel.write(bb); } 解决方法
因为zis.read(缓冲区)可能无法填充整个缓冲区.
请改用以下内容 int len; while((len = zis.read(buffer)) >= 0){ ByteBuffer bb = ByteBuffer.wrap(buffer,len); writeChannel.write(bb); } 希望这有帮助 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 工具提示背景(使用JavaFX CSS)
- mysql数据库的连接以及增删改查Java代码实现
- Map构造器模式 map builder pattern
- Java中break、continue、return在for循环中的使用
- Java中SimpleDateFormat的使用方法
- [数据库连接池二]Java数据库连接池--C3P0和JDNI.
- java – 如何防止JList在单元格边界之外进行选择?
- 带有progressBar和Slider的JavaFX图形bug
- Java 8 Streams可以使用映射管道中的多个项目
- java – Spring XML中applicationcontext的“this”引用