在我的应用程序中,我需要执行以下操作:

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);

}

java对图像的解压_java – 将图像解压缩到blobstore中相关推荐

  1. java文件压缩与解压_Java实现文件压缩与解压

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...

  2. Java实现Zip文件解压

    2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...

  3. ActiveMQ的安装和启动 安装JAVA配置JAVA环境 下载ActiveMQ 解压压缩包 tar zxvf activemq-x.x.x-bin.tar.gz 至此,linux下Activ

    ActiveMQ的安装和启动 安装JAVA配置JAVA环境 下载ActiveMQ 解压压缩包  tar zxvf activemq-x.x.x-bin.tar.gz 至此,linux下ActiveMQ ...

  4. java gz压缩文件解压

    java gz压缩文件解压 gzFileName压缩文件全路径 targetFileName解压后的文件全路径 public boolean unGzFile(String gzFileName,St ...

  5. java 文件压缩 解压_Java文件压缩与解压缩(一)

    package com.cn; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream ...

  6. java解压_Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)

    JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的 ...

  7. java zip解压_Java语言入门第一课

    Java最初的目标是嵌入式设备,不过在嵌入式设备方面并未取得成功.失之东隅,收之桑榆,Java却在Web领域被广泛接受.近年来,随着Java在服务器领域的不断突破,让这门语言越来越流行. 有人喜欢Ja ...

  8. java 使用7z进行解压_java调用7zip解压压缩包的实例

    前言 最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题. 7zip命 ...

  9. java zip压缩解压_JAVA实现实用的ZIP压缩与解压

    程序实现了ZIP压缩.共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压. ...

最新文章

  1. 利用HTTP Cache来优化网站
  2. 直面故障,我们该怎么做?
  3. 计算机上能玩vr游戏吗,VR设备是什么? 听说可以用来玩电脑游戏的?
  4. 成功解决 raise XGBoostError(_LIB.XGBGetLastError()) xgboost.core.DMatrix/Booster has not been intialized
  5. Python学习:集合
  6. puppetmaster 、agent 证书管理相关
  7. Membership三步曲之入门篇 - Membership基础示例
  8. py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图
  9. html文档在word打开是乱码怎么解决,word打开是乱码的解决方法
  10. C# Xml序列化Dictionary
  11. 远程桌面用户输入法的配置
  12. 001 线性代数之行列式:定义、逆序数、余子式与代数余子式、n个易算行列式、范德蒙行列式
  13. 华师大 OJ 3023
  14. 零磁屏蔽磁场发生系统/地磁动态模拟屏蔽系统简介
  15. 为什么开发Java Web都要用框架
  16. 浅析c++中virtual关键字
  17. 记住你即将死去--乔布斯斯坦福演讲
  18. 程序员从网上抄代码,被老板发现后....
  19. android输入法键盘下载安装,键多多输入法下载安装
  20. 大学英语(第六册)复习(原文及全文翻译)——Unit 10 - Debating The Unknowable(探索未知世界)

热门文章

  1. How To Deploy OpenShift Container Platform 4.8 on KVM
  2. x86 高精度延时方案实现(10us误差) | 功耗模式C-states
  3. Linux环境无文件渗透执行ELF:memfd_create、ptrace
  4. FD.io VSAP(VPP Stack Acceleration Project),通过FD.io VSAP构建用户态协议栈
  5. CUDA:在GPU上实现核函数的嵌套以及编译运行
  6. mysql回滚部分记录_MySQL事务部分回滚-回滚到指定保存点
  7. lombok原理_十分钟搞懂Lombok使用与原理
  8. java实现最小二乘法
  9. 内网通不用软件改积分_软件项目为什么不能够如期交付?
  10. mysql 进入数据库名_操作mysql数据库的一些命名