我正在尝试从请求属性中获取来自移动应用程序的图像字节。
上游发送的图像格式是BitMap。 以Base64格式编码。
如何获取Web应用程序中的字节? 我在我的Web应用程序中使用以下代码片段,我用它从移动应用程序请求中获取数据。 我对代码很感兴趣。我不确定我是对还是错。
byte[] line = null;
int noOfBytesRead;
StringBuffer content = new StringBuffer();
HashMap<String, Object> lResultMap = null ;
try
{
log.info("request getInputStream: " + request.getInputStream());
ServletInputStream sis = request.getInputStream();
line = new byte[128];
noOfBytesRead = sis.readLine(line, 0, 128);
log.info("noOfBytesRead :1 " + noOfBytesRead);
if (noOfBytesRead < 3)
return null;
noOfBytesRead = sis.readLine(line, 0, 128); // Reads the content disposition and form name and filename
log.info("line :"+line+" adn the noOfBytesRead : 2 : " + noOfBytesRead);
int numBytesToRead = noOfBytesRead;
int availableBytesToRead;
while ((availableBytesToRead = sis.available()) > 0)
{
byte[] bufferBytesRead;
bufferBytesRead = availableBytesToRead >= numBytesToRead ? new byte[numBytesToRead] : new byte[availableBytesToRead];
sis.read(bufferBytesRead);
content.append(new String(bufferBytesRead, Charset.forName("iso-8859-1")));
}
sis.close();
log.info("The bytes is : " +content.toString());
byte[] image = null;
image = content.toString().getBytes(Charset.forName("iso-8859-1")) ;
log.info("image : " +image);
Base64Decoder decoder = new Base64Decoder();
byte[] imgBytes = decoder.decode(content.toString());
log.info("imgBytes : decoded byted" + imgBytes);
lResultMap = new HashMap<String, Object>();
lResultMap.put("content" , imgBytes );
log.info("content string buffer : " +content);
log.info("lResultMap : " +lResultMap);
}
catch (Exception e)
{
e.printStackTrace();
log.log(Level.SEVERE, e.getMessage(), e);
}
答案 0 :(得分:0)
很难理解你的代码,因为它没有格式化,但这是我的简单解决方案
URL url = new URL(contentUrl);
URLConnection conn = url.openConnection();
InputStream inStr = conn.getInputStream();
BufferedInputStream buffInStr = new BufferedInputStream(inStr);
// Need to check the size of Byte Array Buffer.
ByteArrayBuffer baf = new ByteArrayBuffer(500);
int current = 0;
while ((current = buffInStr.read()) != -1) {
baf.append((byte) current);
}
byte[] array = baf.toByteArray();
在谷歌应用引擎上
Image Service API接受任何支持的图像文件格式的数据。根据{{3}},这些格式包括“JPEG,PNG,WEBP,GIF(包括动画GIF),BMP,TIFF和ICO”。 Image服务不提供从头创建新图像数据的方法。但是您可以使用图形库以一种可接受的数据格式生成图像,然后使用该服务将其转换为另一种格式,或者对其进行转换。当然,根据图形库,您可以直接从库中获取最终图像,而不是使用该服务。
要提供图像,只需为您正在使用的数据格式设置适当的Content-Type标头,然后将图像数据的字节写入响应的输出流:
// byte[] pngData = ...
resp.addHeader("Content-Type", "image/png");
resp.getOutputStream().write(pngData);
如果您想尝试在没有库的情况下生成图像数据,BMP格式可能最简单。您可以使用Images服务将其转换为PNG。