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下的吗?怎么跑到这个莫名其妙的地方了?
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";
还是放在.metadata\...这个文件下,好像是因为servlet编译成class文件后,在Eclipse下class文件就是放在.metadata....Eclipse实际工作目录下,我想的是把上传的文件放在我们可以在Eclipse上直接操作的这个目录下(而不是.metadata..Eclipse实际工作目录下),除了绝对路径好像没什么办法
追答注意区分下部署目录和工程目录。web应用程序是在部署目录执行的。
.metadata是部署目录,WebContent是工程目录。
如果使用eclipse运行程序,那么工程就会部署到.metadata下面,实际文件就保存到该目录下。
把项目拷贝到tomcat下的webapps下,也就是直接部署到服务器上,上传文件保存到该目录里。
也就是说在Eclipse中创建工程的时候要将工程目录放到tomcat的webapps下?那知道了。那还是那个问题:在Eclipse下,我在上面创建文件夹upload刷新后在部署目录下不会生成相应的文件(我试了下,若是再在upload下创建一个JSP文件部署目录就会生成upload文件夹),可之前好像不知道怎么,部署目录下会自动生成upload文件夹,你说的直接运行和重新部署是什么意思?怎么做?
追答直接运行:
在webapps下新建目录ch1,把工程内容拷贝到tomcat下的;(拷贝的是WebContent下的文件,把编译好的最新的class文件放到WEB-INF下的classes中)
这里的webapps/ch1就是部署的目录,与工程的实际目录不一样。(工程的目录可能在e:/ch1)
启动tomcat,访问servlet,上传的文件就保存到webapps/ch1/upload文件夹里。不会放到.metadata里面了。
不知道你的目的是不是这样?
重新部署:
重新部署:Server标签下我并没有看到Status、Mode、Location等选项啊,如图:
看来你的是eclipse,没有部署的功能。
要想使新建的upload目录体现在工作空间,除了刷新之外,可以试着手动删除已部署的工程,或直接Run as on server等,多试试。
相对而言,My Eclipse就方便很多了。