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. 彻底搞懂etcd raft选举、数据同步

    etcd raft选举机制 etcd 是一个分布式的k/V存储系统.核心使用了RAFT分布式一致性协议.一致性这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服 ...

  2. Vue自定义组件中Props中接收数组或对象

    原文:https://www.jianshu.com/p/904551dc6c15 自定义弹框组件时,需要在弹框内展示商品list,所以需要组件中的对应字段接收一个Array数组,默认返回空数组[], ...

  3. JavaScript 之 节点操作

    一.文档树结构 DOM 可以将任何 HTML 或 XML 描绘成一个由多层节点构成的结构. 节点分为不同的类型,每种类型分别表示文档中不同的信息.每个节点都拥有各自的特点.数据和方法,另外也与其他节点 ...

  4. git 检索

    图形化客户端:sourcetree下载: https://www.sourcetreeapp.com/安装: 由于种种不可描述的原因,无法注册账号且无法登陆所以需要绕过登陆绕过登陆: 去到 C:\Us ...

  5. jenkins部署java项目(五)

    一.web server安装jdk+tomcat其中jdk可以为openjdk,版本1.8 1.1 安装jdk环境 方式一:直接使用yum安装openjdk # * 方式二:本地安装在oracle官网 ...

  6. httprunner学习16-locust性能测试

    前言 HttpRunner 的 yaml 脚本文件,可以结合locust做性能测试 locust环境准备 安装完成 HttpRunner 后,系统中会新增locusts命令,但不会同时安装 Locus ...

  7. P5021 赛道修建[贪心+二分]

    题目描述 C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 mm 条赛道. C 城一共有 nn 个路口,这些路口编号为 1,2,-,n1,2,-,n,有 n-1n−1 条适合于修建赛道的双向通 ...

  8. Spark常规性能调优

    1.1.1     常规性能调优一:最优资源配置 Spark性能调优的第一步,就是为任务分配更多的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行 ...

  9. Brief Introduction to SDK – JRE – JVM – JIT

    Brief Introduction to SDK – JRE – JVM – JIT SDK This is complete collection of Java stuff, as it has ...

  10. React (Native) Rendering Lifecycle

    How Does React Native Work? The idea of writing mobile applications in JavaScript feels a little odd ...