java – 将图像解压缩到blobstore中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 将图像解压缩到blobstore中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1885字,纯文字阅读大概需要3分钟。
内容图文
在我的应用程序中,我需要执行以下操作:
1.带有图像的zip文件(仅限jpgs)和其他内容上传到BlobStore.
2.应用引擎后端应该从上传的zip读取条目,并将内部找到的所有图像保存为BlobStore作为独立文件.
我成功上传,解压缩和保存文件@ blobstore,但图像似乎被打破了.
当我从BlobStore下载它们(只是blobstoreService.serve它们)时,图像颜色错误,或部分显示,或以其他方式破坏.尝试使用ImagesService也会引发异常.我在压缩之前检查了图像的大小,并且在写入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, 0, len);
writeChannel.write(bb);
}
希望这有帮助
内容总结
以上是互联网集市为您收集整理的java – 将图像解压缩到blobstore中全部内容,希望文章能够帮你解决java – 将图像解压缩到blobstore中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。