url==/WebFriend/userimg/1307029058093.jpgjava.lang.IllegalArgumentExcept

不所谓先生 2011-06-02 11:47:23
url==/WebFriend/userimg/1307029058093.jpgjava.lang.IllegalArgumentException: This path does not exist (1135).
这是代码..就是在file.saveAs这边会出错,我想不通了我工程路径是对的,也有这个文件夹..为什么它老是报错
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@page import="java.util.*" %>
<%@page import="java.sql.*" %>
<%@page import="java.io.*" %>
<%@page import="com.jspsmart.upload.*" %>
<%@page import="java.awt.*" %>
<%@page import="java.awt.image.*" %>
<%@page import="com.sun.image.codec.jpeg.*" %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<title>文件上传处理页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<%
try
{
String url= "jdbc:mysql://localhost:3306/message";
String user="root";
String password="root";

SmartUpload su = new SmartUpload();
su.initialize(pageContext);
su.setMaxFileSize(2000000);
su.setTotalMaxFileSize(20000000);
su.setAllowedFilesList("jpg,gif,bmp,png");
su.upload();
for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
if (file.isMissing()) continue;
java.util.Date d =new java.util.Date();
Long l = d.getTime();
System.out.print("url=="+request.getContextPath()+"/userimg/" +l.toString()+ "."+file.getFileExt());
file.saveAs(request.getContextPath()+"/userimg/" +l.toString()+ "."+file.getFileExt());
java.io.File yuan = new java.io.File(request.getContextPath()+"/userimg/" +"\\"+l.toString()+ "."+file.getFileExt()); //读入刚才上传的文件
System.out.print(yuan);
String newurl=request.getContextPath()+"/userimg/" +"\\"+l.toString()+ "_s."+file.getFileExt(); //新的缩略图保存地址
Image src = javax.imageio.ImageIO.read(yuan); //构造Image对象
int new_w=150;
int new_h=150;
BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //绘制缩小后的图
FileOutputStream newimage=new FileOutputStream(newurl); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
encoder.encode(tag); //近JPEG编码
newimage.close();
out.print("id======="+Integer.parseInt(session.getAttribute("id").toString()));
String opath=request.getContextPath()+"/userimg/"+l.toString()+ "."+file.getFileExt();
String spath=request.getContextPath()+"/userimg/"+l.toString()+ "_s."+file.getFileExt();

request.setCharacterEncoding("gb2312");
Class.forName("com.mysql.jdbc.Driver"); //载入JDBC驱动程序
Connection conn=DriverManager.getConnection(url,user,password);; //创建数据库连接对象
PreparedStatement stmt=conn.prepareStatement("update user_table set userImg =? where id="+Integer.parseInt(session.getAttribute("id").toString()));
//预编译的 SQL 语句执行对象,参数是具体的SQL语句,未知内容用?代替
stmt.setString(1,spath);
stmt.execute(); //执行该SQL语句
stmt.close();
conn.close();
session.setAttribute("userloginimg","userimg/"+l.toString()+ "_s."+file.getFileExt());
response.sendRedirect("index_frist.jsp");
}

}
catch(Exception e)
{
out.print("文件格式错误或则太大");

System.out.print(e);
}
%>
</body>
</html>
------------------------------------------
但是只要把 file.saveAs(request.getContextPath()+"/userimg/" +l.toString()+ "."+file.getFileExt());改成
file.saveAs("/userimg/" +l.toString()+ "."+file.getFileExt());
就可以了,但是图片却保存到了MyEclipse的自带tomcat里面去了.metadata\.me_tcat\webapps\WebFriend\userimg...弄了半天没搞清楚是神马状况
求助高手
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
不所谓先生 2011-10-05
  • 打赏
  • 举报
回复
谢谢。。。其实主要原因还是服务器的路径配置。。。。我修改了tomcat里的server.xml里面的配置就行了
magong 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 a236036779 的回复:]

之前我写在servlet里的时候也用了ServletContext.getResourceAsStream()获取路径,效果一样,开文件是还没试过能说得具体点么,是不是发布在myeclipse都会保存到它自带的tomcat里面去啊
[/Quote]
你顶楼说的request.getContextPath()不要写,这是对的。
然后ServletContext.getResourceAsStream()开文件的时候,也不要写request.getContextPath(),保持和saveAs时使用的参数一致就行了。

最后,SmartUpload现在连网站都找不到了,建议不要用了。
magong 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 a236036779 的回复:]

.....那个//去掉会出错....真是头疼啊...求救赎
[/Quote]
你不能为了渴就去喝毒药。
仔细考虑我1楼的建议。
不所谓先生 2011-06-04
  • 打赏
  • 举报
回复
错了是ServletContext.getResource
不所谓先生 2011-06-04
  • 打赏
  • 举报
回复
之前我写在servlet里的时候也用了ServletContext.getResourceAsStream()获取路径,效果一样,开文件是还没试过能说得具体点么,是不是发布在myeclipse都会保存到它自带的tomcat里面去啊
不所谓先生 2011-06-03
  • 打赏
  • 举报
回复
.....那个//去掉会出错....真是头疼啊...求救赎
magong 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 a236036779 的回复:]
file.saveAs(request.getContextPath()+"/userimg/" +l.toString()+ "."+file.getFileExt());
java.io.File yuan = new java.io.File(request.getContextPath()+"/userimg/" +"\\"+l.toString()+ "."+file.getFileExt()); //读入刚才上传的文件
[/Quote]
楼主不小心了吧
saveAs的时候和读取的时候用了不同的目录路径(多了个"\\")
然后,不要用File来开文件,直接用ServletContext.getResourceAsStream()方法来获取输入流好了。
如果一定要用File,先getRealPath

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧