JSP+JSPSmartUpload 文件上传后没有上传到指定目录下

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServl... protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub
SmartUpload su=new SmartUpload();
su.initialize(servletconfig, request, response);
su.setMaxFileSize(100000);
su.setTotalMaxFileSize(200000);
su.setAllowedFilesList("doc,txt");
try {
su.setDeniedFilesList("exe,bat,jsp,html,htm");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
su.upload();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
int count=su.save("/upload");
if(count>0){System.out.println("succeed!");//成功后再跳转这里未写}
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
由upload.jsp中的一个表单上传选择文件后,action指向该servlet,然后,我是想把上传的文件保存到根目录ch1下的upload文件下的,可不知道为什么,有时候能成功,有时候不能成功(成功之后我把upload删除了,Eclipse退出来,再新建upload文件夹后再试又不成功了),然后成功的时候我去查了下上传文件在哪?结果查到是D:\Eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ch1\upload
(在不成功的时候,在这个目录下是没有upload文件夹的,新建它就能成功了)
我度娘了下,知道这是Eclipse工作的缓存工作区,有时好像我在D:\Eclipse\workspace\ch1\WebContent下新建upload文件夹再运行upload.jsp好像可以自动在D:\Eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ch1\upload自动创建一个upload文件夹,然后上传就成功了,但有时不行,不知道为什么?
还有这是为什么啊?上传的路径这样写不是直接放在D:\Eclipse\workspace\ch1\WebContent\upload下的吗?怎么跑到这个莫名其妙的地方了?
展开
 我来答
蓝果大刀
2014-12-03 · TA获得超过259个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:237万
展开全部
1、上传有时候能成功,有时候不能成功:
如果使用eclipse运行应用,则应用默认部署在workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\这个目录里,ch1应该是你的工程的名字,SmartUpload的save方法是相对于工程根目录而言。
至于上传失败,应该是由于目录不存在的原因。
当你在工程中创建upload后,刷新工程可以直接在workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ch1下生成相同的目录。

2、上传的路径这样写不是直接放在WebContent\upload下的吗?

如果想把文件上传到WebContent\upload下,可以把应用直接部署到tomcat的webapps目录下。

可以在上传之前判断下目录是否存在,试试这种写法:

String savePath = getClass().getClassLoader().getResource("/").toString().substring(6) + "/upload";
File f = new File(savePath);
if (!f.exists()) {
f.mkdirs()

}
int count=su.save(savePath);
更多追问追答
追问
1.这里的根目录不是应该是web工程的根目录(\ch1)吗?

2.我在Eclipse下WebContent下创建文件夹upload后刷新,那个目录不会生成,之前成功的那几次我都不知道是什么情况下才成功的,

3.应用是在Eclipse下创建的,它创建后都是在Eclipse的工作工程下的啊
4.最后还是保存在D:....\.metadata\.....\ch1\WEB-INF\classes\upload
追答
1、按理说根目录应该是ch1,但实际上eclipse是把WebContent中的内容全部拷贝到工作空间,所以WebContent是真正意义上的根目录
2、如果刷新的时候不自动生成,可以试试直接运行或者重新部署
3、你说的没错
4、抱歉,写的不对,这样:
String savePath = request.getRealPath("/") + "/upload";
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式