1. <span style="font-family: Arial, Helvetica, sans-serif; ">

  2. </span>

<span style="font-family: Arial, Helvetica, sans-serif; "><span style="color:#ff0000;">一 环境的搭建:</span></span>

eclipase + javaEE +  commons-fileupload-1.2.1.jar + commons-io-2.0.jar   +  tomcat 7.0.68

二  文件上传的servlet 代码实现!


  1. package com.baidu.fileupload.servlet;

  2. import java.io.File;

  3. import java.io.FileOutputStream;

  4. import java.io.IOException;

  5. import java.io.InputStream;

  6. import java.io.OutputStream;

  7. import java.util.List;

  8. import javax.servlet.ServletException;

  9. import javax.servlet.annotation.WebServlet;

  10. import javax.servlet.http.HttpServlet;

  11. import javax.servlet.http.HttpServletRequest;

  12. import javax.servlet.http.HttpServletResponse;

  13. import org.apache.commons.fileupload.FileItem;

  14. import org.apache.commons.fileupload.FileUploadException;

  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;

  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;

  17. @WebServlet("/uploadServlet")

  18. public class UploadServlet extends HttpServlet {

  19. private static final long serialVersionUID = 1L;

  20. protected void doPost(HttpServletRequest request,

  21. HttpServletResponse response) throws ServletException, IOException {

  22. DiskFileItemFactory factory = new DiskFileItemFactory();

  23. factory.setSizeThreshold(1024*500);

  24. File tempDirectory = new File("d:\\tempDirectory");

  25. factory.setRepository(tempDirectory);

  26. ServletFileUpload upload = new ServletFileUpload(factory);

  27. try {

  28. List<FileItem> items = upload.parseRequest(request);

  29. for(FileItem item:items){

  30. if(item.isFormField()){

  31. String name = item.getFieldName();

  32. String value = item.getString();

  33. System.out.println( name + " : " + value);

  34. }else{

  35. String fieldName = item.getFieldName();

  36. String fileName = item.getName();

  37. String contentType = item.getContentType();

  38. long sizeInBytes = item.getSize();

  39. System.out.println(fieldName);

  40. System.out.println(fileName);

  41. System.out.println(contentType);

  42. System.out.println(sizeInBytes);

  43. InputStream in = item.getInputStream();

  44. byte[] buffer = new byte[1024];

  45. int len = 0;

  46. fileName = "d:\\files\\" + fileName;

  47. System.out.println(fileName);

  48. OutputStream out = new FileOutputStream(fileName);

  49. while((len = in.read(buffer)) != -1){

  50. out.write(buffer, 0, len);

  51. }

  52. out.close();

  53. in.close();

  54. }

  55. }

  56. } catch (FileUploadException e) {

  57. e.printStackTrace();

  58. }

  59. }

  60. }

三  JSP 编写

update.jsp


  1. <%@ page language="java" contentType="text/html; charset=UTF-8"

  2. pageEncoding="UTF-8"%>

  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  4. <html>

  5. <head>

  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  7. <title>Insert title here</title>

  8. </head>

  9. <body>

  10. <form action="uploadServlet" method="post" enctype="multipart/form-data">

  11. File: <input type="file" name="file" />

  12. <br><br>

  13. <br><br>

  14. DESC: <input type="text" name="desc" />

  15. <br><br>

  16. <br><br>

  17. <input type="submit" value="Submit" />

  18. </form>

  19. </body>

  20. </html>

四, 运行过程中出现的问题

 五, 解决的办法:

进过一番百度, 无意中看到一位朋友提到,不同的浏览器对上传的文件名的处理方式不太一样 ,进过一番实验,搞定,且增加了一行代码!


  1. package com.baidu.fileupload.servlet;

  2. import java.io.File;

  3. import java.io.FileOutputStream;

  4. import java.io.IOException;

  5. import java.io.InputStream;

  6. import java.io.OutputStream;

  7. import java.util.List;

  8. import javax.servlet.ServletException;

  9. import javax.servlet.annotation.WebServlet;

  10. import javax.servlet.http.HttpServlet;

  11. import javax.servlet.http.HttpServletRequest;

  12. import javax.servlet.http.HttpServletResponse;

  13. import org.apache.commons.fileupload.FileItem;

  14. import org.apache.commons.fileupload.FileUploadException;

  15. import org.apache.commons.fileupload.disk.DiskFileItemFactory;

  16. import org.apache.commons.fileupload.servlet.ServletFileUpload;

  17. @WebServlet("/uploadServlet")

  18. public class UploadServlet extends HttpServlet {

  19. private static final long serialVersionUID = 1L;

  20. protected void doPost(HttpServletRequest request,

  21. HttpServletResponse response) throws ServletException, IOException {

  22. DiskFileItemFactory factory = new DiskFileItemFactory();

  23. factory.setSizeThreshold(1024*500);

  24. File tempDirectory = new File("d:\\tempDirectory");

  25. factory.setRepository(tempDirectory);

  26. ServletFileUpload upload = new ServletFileUpload(factory);

  27. upload.setSizeMax(1024 * 1024 * 5);

  28. try {

  29. List<FileItem> items = upload.parseRequest(request);

  30. for(FileItem item:items){

  31. if(item.isFormField()){

  32. String name = item.getFieldName();

  33. String value = item.getString();

  34. System.out.println( name + " : " + value);

  35. }else{

  36. String fieldName = item.getFieldName();

  37. String fileName = item.getName();

  38. String contentType = item.getContentType();

  39. long sizeInBytes = item.getSize();

  40. System.out.println(fieldName);

  41. System.out.println(fileName);

  42. System.out.println(contentType);

  43. System.out.println(sizeInBytes);

  44. //不同的浏览器提交的文件名是不一样的,有些浏览器提交的文件名是带有路径的,如:c:\nihao\a.txt,而有些只是单纯的文件名,如:a.txt

  45. //处理获取到的上传文件的文件名的路径部分,只保留文件名部分

  46. fileName = fileName.substring(fileName.lastIndexOf("\\")+1);

  47. InputStream in = item.getInputStream();

  48. byte[] buffer = new byte[1024];

  49. int len = 0;

  50. fileName = "d:\\files\\" + fileName;

  51. System.out.println(fileName);

  52. OutputStream out = new FileOutputStream(fileName);

  53. while((len = in.read(buffer)) != -1){

  54. out.write(buffer, 0, len);

  55. }

  56. out.close();

  57. in.close();

  58. }

  59. }

  60. } catch (FileUploadException e) {

  61. e.printStackTrace();

  62. }

  63. }

  64. }

显示推荐内容

Web 开发中 文件上传 是出现的:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)的更多相关文章

  1. windows7下系统保护中出现错误“文件名、目录名或卷标语法不正确。(0x8007007B)“ 以及保护设置列表中出现“Windows7_os(c:)(找不到)”选项时的解决方法

    windows7下系统保护功能很是鸡肋,有事会出现一下两个问题: 1.出现错误“文件名.目录名或卷标语法不正确.(0x8007007B) 2.保护设置列表中出现“Windows7_os(c:)(找不到 ...

  2. 在运行bat文件时,报错发生系统错误123,文件名,目录名或卷标语法不正确

    报错:发生系统错误123,文件名,目录名或卷标语法不正确 这个错误就相当于你在dos命令行中输入一个命令,报错“不是内部或外部命令,也不是可运行的程序”.此时你可以在系统环境变量中检查是否配置了这个命 ...

  3. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  4. Servlet中文件上传下载

    1.文件下载: package FileUploadAndDown; import java.io.FileInputStream; import java.io.IOException; impor ...

  5. web项目的文件上传和 下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用Java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  6. jsp\struts1.2\struts2 中文件上传(转)

    jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...

  7. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  8. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  9. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

随机推荐

  1. 2019 百合佳缘java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.百合佳缘等公司offer,岗位是Java后端开发,因为发展原因最终选择去了百合佳缘,入职一年时间了,也成为了面 ...

  2. datax分析与思考(一)

    Datax 总体流程图 先看执行的第一个步骤: 在最上层抽象类,这个里面相当于获取全局公共信息,java入口部分就是这个Engine的main方法直接启动 Engine 启动 com.alibaba. ...

  3. 为什么要用 redis 而不用 map 做缓存?

    缓存分为本地缓存和分布式缓存.以 Java 为例,使用自带的 map 或者 guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例 ...

  4. 把微信小程序异步API转为Promise,简化异步编程

    把微信小程序异步API转化为Promise.用Promise处理异步操作有多方便,谁用谁知道. 微信官方没有给出Promise API来处理异步操作,而官方API异步的又非常多,这使得多异步编程会层层 ...

  5. Cheat Engine 模糊数值

    打开游戏 玩到换枪为止 换枪 发现子弹数量是有限的200 扫描200 这是初次扫描 开两枪 剩余子弹数量194 再次扫描194 得到地址 尝试得到的这两个地址,经验证,第二个是我们想要的地址 重新开始 ...

  6. 创建简易的SpringBoot项目

    创建简易的SpringBoot项目 这两天在学习springboot,菜鸟刚刚知道这个东西,看着springboot项目下那一大堆目录都不知道从何下手,还是静下心来从最简单的创建一个项目入手,这路和大 ...

  7. 记Html的初次接触

    第一次接触Html是在昨天的培训班体验课上,这一次课我明白了许多. 1.程序语言比我想象中还要多(原来除了C与Java还有这么多) 2.程序员毕业后掌握7种语言是很正常的事(难怪程序员会秃顶) 3.H ...

  8. 关于ThinkPHP5.1+的Log无法记录SQL调试记录的小经历

    项目开发阶段,除了基本编码外,性能也需要实时关注与优化.之前我的大部分项目都是使用ThinkPHP5.0以及ThinkPHP3.2,对于框架提供的日志记录和日志配置都差不多,然后使用ThinkPHP5 ...

  9. NGINX一览无余

    Nginx 是如何实现高并发的? 异步,非阻塞,使用了epoll 和大量的底层代码优化. 如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数.正常情况下,会有很多进程一 ...

  10. 自定义View(五),onLayout

    转自http://blog.csdn.net/a396901990/article/details/38129669 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onM ...