Jsp apache commons文件上载api未正常运行

Jsp apache commons文件上载api未正常运行,jsp,servlets,apache-commons,Jsp,Servlets,Apache Commons,我用apache commons做了一个文件上传网页,这里发生的事情就像有时它上传文件,有时它不上传文件,我不知道问题出在哪里,是在代码中(但它上传文件)还是在网络中,因为我的输出页面将显示“文件上传成功”如果文件上传到服务器上,我已经测试了我的代码很多次,对于单次和多次上传都可以正常工作。问题是从web服务器(apache tomcat)托管页面时开始的 import com.mysql.jdbc.PreparedStatement; 导入java.io.File; 导入java.io.IOE

我用apache commons做了一个文件上传网页,这里发生的事情就像有时它上传文件,有时它不上传文件,我不知道问题出在哪里,是在代码中(但它上传文件)还是在网络中,因为我的输出页面将显示“文件上传成功”如果文件上传到服务器上,我已经测试了我的代码很多次,对于单次和多次上传都可以正常工作。问题是从web服务器(apache tomcat)托管页面时开始的

import com.mysql.jdbc.PreparedStatement;
导入java.io.File;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入java.util.Iterator;
导入java.util.List;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
公共类uploadpagedb扩展HttpServlet{
私有字符串fileName=“”;
私有字符串main=“”;
私有字符串位置;
私有字符串子节点;
私有文件上传文件;
私有字符串文件;
私有字符串文件类型;
@凌驾
public void init(){
}  
@凌驾
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException
{        
结果集rs=null;
PreparedStatement psmnt=null;
尝试
{  
PrintWriter out=response.getWriter();
DiskFileItemFactory=新的DiskFileItemFactory();
ServletFileUpload fileUpload=新建ServletFileUpload(工厂);
列表项=fileUpload.parseRequest(请求);
迭代器ir=items.Iterator();
while(ir.hasNext()){
FileItem=(FileItem)ir.next();
字符串名称=item.getFieldName();
if(item.isFormField())
{  
if(name!=null)
{  
if(name.equals(“fileName”))
{  
fileName=item.getString();
}
else if(name.equals(“main”))
{  
main=item.getString();
}
如果(名称等于(“子”))
{
sub=item.getString();
}
else if(name.equals(“文件类型”))
{
filetype=item.getString();
}
}  
}
其他的
{  
字符串file1=item.getFieldName();
字符串file2=item.getName();
filen=file2;
位置=File.separator+“home”+File.separator+“adapco”+File.separator+“Desktop”+File.separator+“output”+File.separator+main+File.separator+sub+File.separator+filen;
uploadFile=新文件(位置);
long size=item.getSize();
如果(大小您可以尝试使用

uploadFile = new File(getServletContext().getRealPath(location)); 
这将在web应用的根文件夹中创建文件(使用文件夹结构)。
如果文件位置正确,则更改行

String file2=item.getName();  


因为IE浏览器在客户端机器上发送完整路径。

…当您重新部署webapp或在某些服务器配置中,即使您刚刚重新启动服务器,也会丢失该路径,原因很简单,上传的文件不是原始WAR/EAR的一部分。您绝对不应将上传的文件存储在扩展的WAR文件夹中。另外,
getRealPath()
是否返回非空值取决于服务器配置(有时它不是扩展到磁盘,而是扩展到内存),您不想依赖它。@BalusC我查看了Commons FileUpload FAQ建议的Commons IO方法的源代码。我还查看了java.IO.File方法getName的源代码。它们基本相同。它们都使用字符串方法lastIndexOf(分隔符)创建子字符串。所以我不理解你的反对意见。我使用流式API,所以我不依赖Commons IO。这就是为什么我更喜欢我的方式。@BalusC,我从linux机器上运行页面,文件上载到它想要的位置,但同一页面有时不工作,更具体地说,我已经创建了fo例如:如果iam在dir/home/user/Desktop/output/filename.extn中上载文件,则该文件将在上述定义的路径中成功上载,但如果我在一段时间后上载另一个文件,则该文件不会在其目录中上载location@rickz:页面正在交替上载文件(工作和不工作)在路径中。当它“不工作”时会发生什么?您应该添加一些调试行。打印出file2变量。您还可以向我们显示您的完整代码。您在try块中有上面发布的代码吗?catch块中有什么?@BalusC我也有同样的问题。您解决了这个问题吗?请参阅
String file2=item.getName();  
String file2 = new File(item.getName()).getName();