最近有一个大作业想搞一个图片格式转换的webapp,其中用到了base64编码,用下边的代码如果是纯JAVA没有问题,但写在JSP里“return encoder.encode(data); ”这句就总报错“org.apache.jasper.JasperException”,网上查说是JSTL的问题,按http://www.cnblogs.com/yan5lang/archive/2009/07/15/1524161.html所给的解决方案用了没有解决,因为初用JSP,所以了解不是很深,不知道是我解决的不对还是问题出在其它地方,希望了解的大虾们给予指点,谢谢了。
PS:又有分了,重复发下贴,不好意思了。。
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="sun.misc.BASE64Decoder" %>
<%@ page import="sun.misc.BASE64Encoder" %>
<%!
String GetImageStr()
{ //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String imgFile = "1.jpg" ; //待处理的图片
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try
{
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
//try{
return encoder.encode(data); //返回Base64编码过的字节数组字符串
//}
//catch(Exception e){
// return null;
//}
}
%>
<%!
boolean GenerateImage(String imgStr)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;i++)
{
if(b[i]<0)
{ //调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "2.jpg" ; //新生成的图片
OutputStream out1 = new FileOutputStream(imgFilePath);
out1.write(b);
out1.flush();
out1.close();
return true;
}
catch (Exception e)
{
return false;
}
}
%>
<%
String strImg = GetImageStr();
GenerateImage(strImg);
//if(!GenerateImage(strImg))
//out.print("ssss");
%>
PS:又有分了,重复发下贴,不好意思了。。
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="sun.misc.BASE64Decoder" %>
<%@ page import="sun.misc.BASE64Encoder" %>
<%!
String GetImageStr()
{ //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String imgFile = "1.jpg" ; //待处理的图片
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try
{
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
//try{
return encoder.encode(data); //返回Base64编码过的字节数组字符串
//}
//catch(Exception e){
// return null;
//}
}
%>
<%!
boolean GenerateImage(String imgStr)
{ //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try
{
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for(int i=0;i<b.length;i++)
{
if(b[i]<0)
{ //调整异常数据
b[i]+=256;
}
}
//生成jpeg图片
String imgFilePath = "2.jpg" ; //新生成的图片
OutputStream out1 = new FileOutputStream(imgFilePath);
out1.write(b);
out1.flush();
out1.close();
return true;
}
catch (Exception e)
{
return false;
}
}
%>
<%
String strImg = GetImageStr();
GenerateImage(strImg);
//if(!GenerateImage(strImg))
//out.print("ssss");
%>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货