日期:2014-05-17  浏览次数:20763 次

multipart/form-data 上传图片无法显示
***************************jsp中使用如下代码上传文件**********************************
<form action="result.jsp" method="post" enctype="multipart/form-data">
        <input name="file" type="file"/>        
        <input name="name" type="text" value="leo"/>
        <input type="submit" value="submit"/></form>
************************************另一个jsp中使用如下代码解析************************
String name = request.getParameter("name");
InputStream in = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String firstline = br.readLine();
String filename = br.readLine();
String what = br.readLine();String what1 =  br.readLine();
StringBuffer bs = new StringBuffer();
PrintWriter pw = new PrintWriter("f:7.jpg");
String data = null;
while((data=br.readLine()) != null)
{
         if(data.equals(firstline+"--"))
         {
             break;
         }
         bs.append(data);
         pw.println(data);}pw.close();
*******************************************问题:***********************************
1、上传的图片保存到本地始终是一把叉(无法显示),如果是上传txt文件就没有任何问题.
2、我使用字节流尝试了一下本地复制,发现图片可以复制成功,所以我怀疑是不是上传的时候乱码造成的.请教下前辈们,这个问题应该如何解决呢?谢谢! 
JSP 图片 乱码

------解决方案--------------------
原因是你没有正确的写出图像内容,你的那个PrintWriter只是写文本字符
写image不是这样的。把图像的byte写到你的reponse里面即可。
具体看HTTP协议文档,或者Google/baidu会告诉你的。
------解决方案--------------------
给你一个我用过的保存图片
File file=new File("D:/aa.jpg");//原图片,
byte b[]=null;
InputStream is=new FileInputStream(file);
int length=(int)file.length();
if(length>Integer.MAX_VALUE){
System.out.println("max");
}
b=new byte[length];
int offset=0;
int numRead=0;
while(offset<b.length&&(numRead=is.read(b,offset,b.length-offset))>=0){
offset+=numRead;
if(offset<b.length){
System.out.println("error");

}
}
is.close();

File newFile=new File("D:/a");//新图片
OutputStream os=new FileOutputStream(newFile);
os.write(b);
os.flush();
os.close();