您的位置:首页 > 编程语言 > Java开发

Java实现Flash请求的二进制流图片保存并返回XML信息包含图片访问地址

2014-06-21 15:06 711 查看
       前段时间和Flash对接了一个打点功能,java后台提供接口,Flash实现打点功能,将打点好的图片信息传到后台java实现保存图片和打点信息。其中图片是以二进制流的方式传到java后台,图片信息是以XML传到后台保存到数据库。刚开始的实现方式保存图片总是出现损坏,最后放到的图片残缺不全,经过一番调试,最终找到了原因,是在后台写入图片流的时候出现了问题,改了之后一切正常,下面是能够正常执行的代码:

public void addDotPicture(HttpServletRequest request, HttpServletResponse response) throws Exception{
/* 图片保存目录地址,从配置文件读取 */
String serviceImageUrl = "/127.0.0.1/vmsStorage/business";
/* 图片访问目录地址 */
String httpImageUrl = "http://127.0.0.1/vmsStorage/business";
//获取到客服端发过来的流
String picSrcUrl = serviceImageUrl + "/picture"; //图片保存路径
picSrcUrl = PathChange(picSrcUrl);
String picName = UUIDUtil.randomUUID() + ".png"; //图片名称(采取自动生成的uuid为图片命名)
String picHttpUrl = httpImageUrl + "/picture" + picName; //图片访问路径
StringBuffer result = new StringBuffer();
ServletInputStream in = request.getInputStream();
try {
File uploadFile = new File(picSrcUrl, picName);
if (!uploadFile.getParentFile().exists()) {
uploadFile.getParentFile().mkdirs();
}
//检查文件是否已经存在
if (!uploadFile.exists()) {
//建立文件
uploadFile.createNewFile();
}
FileOutputStream out = new FileOutputStream(uploadFile, true);
int len = 0;//每次读取的字节数
byte[] bytes = new byte[2048];
while ((len = in.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
out.flush();
out.close();
picHttpUrl = picHttpUrl.replace("\\", "/");
result.append("<data result=\"true\">")
.append("<image url=\"")
.append(picHttpUrl)
.append("\">")
.append("</image>")
.append("</data>");
} catch (Exception e) {
result.append("<data result=\"false\"></data>");
logger.error(e);
}finally{
in.close();//关闭输入流
logger.info("保存图片返回结果:" + result.toString());
writeXML(result.toString(), response);
}

}

/**
* 过滤路径,根据系统的输出相应格式的路径
* @param path 输入linux路径
* @return
*/
public static String PathChange(String path){
if (File.separator.equals("\\")) {
path = ExchangePath.linuxPath2WindowsPath(path);
}
return path;
}

public static String randomUUID() {
String uuid = java.util.UUID.randomUUID().toString();
uuid = uuid.toUpperCase();
uuid = uuid.replaceAll("-", "");
return uuid;
}

/**
* ajax回写xml信息
* @param msg
* @throws Exception
*/
public void writeXML(String msg, HttpServletResponse response) throws Exception {
PrintWriter write = null;
response.setContentType("application/xml;charset=UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try {
write = response.getWriter();
write.write(msg);
write.flush();
} catch (Exception e) {
throw new Exception("ajax write error:" + e.getMessage());
} finally {
if (write != null) {
write.close();
}
}
}备注:while循环写入文件流的时候需要注意(out.write(bytes, 0, len))。
最后留一句话激励自己:

       想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗。——马克斯威尔·马尔兹
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐