通过jsp页面上传图片至服务器指定目录,上传成功但服务器中的图片不能正常显示,求解?

时间:2020-12-21 12:13:28
jsp:
<form action="" method="post" enctype="multipart/form-data" name="form1">
       <input type="file" name="file"/>
    <input type="button" value="上传" onclick="getJobnum2()"/>
      </form>
 
servlet:
//取得二进制流
  ServletInputStream sis = req.getInputStream();
  
  //与输入缓冲流接上
  BufferedInputStream bis = new BufferedInputStream(sis);
  
  //获取输出流的物理路径
  String imgname = req.getParameter("jobnum");
  String path = Utils.getSysParam("PIC_TMP") + "/TMP_" + imgname + ".jpg";
  
  //文件输出流
  FileOutputStream fos = new FileOutputStream(path);
  
  //缓冲输出流
  BufferedOutputStream bos = new BufferedOutputStream(fos);
  
  //从输入流中读取数据
  byte[] buffer = new byte[1024];
  int len = 0;
 
  while((len = bis.read(buffer)) != -1) {
   //输出读入的数据
   bos.write(buffer, 0, len);
  }
  
  //关闭流
  bos.close();
  fos.close();
  bis.close();
  sis.close();

7 个解决方案

#1


没有高手吗,5555555555555

#2


用上传组件smartUPload

#3


form表单的编码为:enctype="multipart/form-data"
你还可以能过: req.getParameter("jobnum");来取参数的值。
这个不可能吧。
你用:smartUpload组件吧。很轻松搞定

#4


//取得二进制流
  ServletInputStream sis = req.getInputStream();
 
这样写明显是错误的。
原因是从页面传过来的request不仅仅是图片,还有其他的东西,而你只需要的是图片那个属性。
可以使用楼上说的组件。自己写的话比较麻烦。

#5


bos.flush();
flush一下即可

#6


引用 4 楼  的回复:
//取得二进制流
  ServletInputStream sis = req.getInputStream();
 
这样写明显是错误的。
原因是从页面传过来的request不仅仅是图片,还有其他的东西,而你只需要的是图片那个属性。
可以使用楼上说的组件。自己写的话比较麻烦。


有道理,怪不得图片比原来的大,我试试smartupload

#7


引用 5 楼  的回复:
bos.flush();
flush一下即可


不要忽悠我呀~~

#1


没有高手吗,5555555555555

#2


用上传组件smartUPload

#3


form表单的编码为:enctype="multipart/form-data"
你还可以能过: req.getParameter("jobnum");来取参数的值。
这个不可能吧。
你用:smartUpload组件吧。很轻松搞定

#4


//取得二进制流
  ServletInputStream sis = req.getInputStream();
 
这样写明显是错误的。
原因是从页面传过来的request不仅仅是图片,还有其他的东西,而你只需要的是图片那个属性。
可以使用楼上说的组件。自己写的话比较麻烦。

#5


bos.flush();
flush一下即可

#6


引用 4 楼  的回复:
//取得二进制流
  ServletInputStream sis = req.getInputStream();
 
这样写明显是错误的。
原因是从页面传过来的request不仅仅是图片,还有其他的东西,而你只需要的是图片那个属性。
可以使用楼上说的组件。自己写的话比较麻烦。


有道理,怪不得图片比原来的大,我试试smartupload

#7


引用 5 楼  的回复:
bos.flush();
flush一下即可


不要忽悠我呀~~