您的位置:首页技术文章
文章详情页

html5 - java用commons-fileupload上传文件没效果!

【字号: 日期:2023-11-03 10:30:30浏览:76作者:猪猪

问题描述

html5 - java用commons-fileupload上传文件没效果!

.

package yyyy.www;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UploadHandleServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println('post');//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全String savePath = this.getServletContext().getRealPath('/WEB-INF/upload');System.out.println(savePath);File file = new File(savePath);//判断上传文件的保存目录是否存在if (!file.exists() && !file.isDirectory()) { System.out.println('222'); System.out.println(savePath+'目录不存在,需要创建'); //创建目录 file.mkdir();}//消息提示String message = '';try{ //使用Apache文件上传组件处理文件上传步骤: //1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解决上传文件名的中文乱码 upload.setHeaderEncoding('UTF-8'); //3、判断提交上来的数据是否是上传表单的数据 if(!ServletFileUpload.isMultipartContent(request)){//按照传统方式获取数据return; } //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项 List<FileItem> list = upload.parseRequest(request); for(FileItem item : list){//如果fileitem中封装的是普通输入项的数据if(item.isFormField()){ String name = item.getFieldName(); //解决普通输入项的数据的中文乱码问题 String value = item.getString('UTF-8'); //value = new String(value.getBytes('iso8859-1'),'UTF-8'); System.out.println(name + '=' + value);}else{//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filename = item.getName(); System.out.println(filename); if(filename==null || filename.trim().equals('')){continue; } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:ab1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename.substring(filename.lastIndexOf('')+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + '' + filename); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + '' + filename)当中out.write(buffer, 0, len); } //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); message = '文件上传成功!';} }}catch (Exception e) { message= '文件上传失败!'; e.printStackTrace(); }request.setAttribute('message',message);request.getRequestDispatcher('/message.jsp').forward(request, response); }}

从代码看应该在web-INF自动给我创建upload文件夹啊.页面上提示上传成功了.但是文件没上传进来

问题解答

回答1:

eclipse里面看到的WEB-INF是项目的目录,eclipse真正发布的地方才是你的应用运行的地方,你可以在程序里面打印一下WEB-INF的绝对路径,如果我没猜错,应该在workspace/.metadata/下面的某个地方!

回答2:

去tomcat的webapp目录下找你程序同名的文件夹下的web-inf目录。实际上执行的是你编译之后的class字节码,所以实际的目录地址并不是你现在的代码的目录,是编译好后的class字节码所在的目录,也就是tomcat/webapp/{projectName}文件夹下

标签: Html5
相关文章: