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}文件夹下
相关文章:
1. html5 - 百度Ueditor代码高亮和代码段滚动条冲突是怎么回事?2. docker api 开发的端口怎么获取?3. 如何调整IDEA中直接运行java程序的日志输出级别?4. javascript - vue 数据更新了。但是dom没有更新,,,,,如图5. debian - docker依赖的aufs-tools源码哪里可以找到啊?6. css - 关于input标签disabled问题7. java基础,求解答。8. java - 为什么要将Runnable接口的子类对象传递给Thread的构造函数?9. javascript - 静态页面引公共头尾文件,js怎么写吖?10. mysql - sql 中 group 和field 查询问题。