一、使用FromData将表单对象序列化后,使用request.getInputStream()来获取数据

1、表单代码如下

<form id="user-info" method="post" action="upload" ><input type="file" name="file" multiple> <input type="text" name="username"><input type="text" name="password">
</form> <button id="sub">提交</button>

2、js的代码

<script>function createXHR(){return new XMLHttpRequest();}var sub = document.getElementById("sub");sub.onclick=function(){var xhr = createXHR();var form = document.getElementById("user-info");//获取上边的表单xhr.open("post","upload",true);xhr.send(new FormData(form));}
</script>

3、由于是序列化的表单所以java后端,不能使用request.getParameter()获取数据,需要使用request.getInputStream();获取数据

首先我们看到获取的数据

  InputStream in = request.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));String str = "";while((str=br.readLine())!=null){System.out.println(str);}

可以看到读取到这些数据

4、接着使用apache的上传文件框架进行上传

实现效果

以下是代码

package com.wangyang.servlet;import java.io.File;
import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet("/upload")
public class Upload extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");/*InputStream in = request.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(in));String str = "";while((str=br.readLine())!=null){System.out.println(str);}*/System.out.println("[-------------------------------------------------------]");String filepath=request.getServletContext().getRealPath("/")+"upload/";File file = new File(filepath);if(!file.exists()) {file.mkdir();}DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);try {List<FileItem> items= upload.parseRequest(request);for(FileItem item: items) {System.out.println(filepath+item.getName());if(!item.isFormField()) {item.write(new File(filepath+item.getName()));}if(item.isFormField()){System.out.println(item.getString());System.out.println(item.getFieldName());}}} catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch block
            e.printStackTrace();}response.sendRedirect("index.jsp");}
}

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta  charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
</head>
<body><form id="user-info" method="post" action="upload" ><input type="file" name="file" multiple> <input type="text" name="username"><input type="text" name="password"></form> <button id="sub">提交</button><script>function createXHR(){return new XMLHttpRequest();}var sub = document.getElementById("sub");sub.onclick=function(){var xhr = createXHR();var form = document.getElementById("user-info");xhr.open("post","upload",true);xhr.send(new FormData(form));}</script>
</body>
</html>

这里没有进行细节上的编程,只是为了说明简单原理

转载于:https://www.cnblogs.com/wangyang1749/p/9692507.html

java实现文件上传(使用FromData)相关推荐

  1. JAVA大文件上传断点续传解决方案

    JAVA大文件上传断点续传解决方案 参考文章: (1)JAVA大文件上传断点续传解决方案 (2)https://www.cnblogs.com/songsu/p/11834425.html (3)ht ...

  2. java jsp 文件上传_用JSP编写文件上传

    用JSP编写文件上传 发布时间:2016-09-14 来源: 点击: 次 如果你曾用VB编写文件上传的组件的话,那么用JAVA编写文件上传的JAVABEAN十分容易. 下面的例子只是一个简版 pack ...

  3. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  4. Java 多文件上传

    转载自  Java 多文件上传 前台代码很简单: <input type="file" accept=".zip" class="file-lo ...

  5. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...

    vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData()) 地址:https://www.cnblogs.com/muscles ...

  6. Java实现文件上传到服务器(FTP方式)

    Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器private boolean uploadServerB ...

  7. H5+JAVA的文件上传,断点续传

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  8. java web文件上传所需要的commons-fileupload和 commons-io jar包

    文章目录 一.官网获取 二.百度网盘分享 三.分享与热爱 一.官网获取 学习java web文件上传时需要用到两个必备的jar包: commons-fileupload commons-io jar ...

  9. java文件流 m.jb51.net_FasfDFS整合Java实现文件上传下载功能实例详解

    今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 org.c ...

最新文章

  1. Swift for循环:用于索引,数组中的元素?
  2. python训练馆_Python训练营 01
  3. java 判断子类_java判断class是否是某个类的子类或父类
  4. html2canvas图片位移_html2canvas html截图插件图片放大清晰度处理方案,支撑恣意放大倍数,处理原插件图片偏移题目...
  5. 浅谈移动端页面无刷新跳转问题的解决方案
  6. php代码 编码转换,php字符编码转换代码
  7. JSP-Runoob:JSP 自定义标签
  8. linux抓取僵尸网络进程脚本
  9. 中国省-市-县(区)三级城市数据(json和数组)
  10. 中国眼下拥有的人造卫星的种类及其作用
  11. 30天自制操作系统——第二十四天增加命令行窗口
  12. gmx_MMPBSA.py的安装及使用--只翻译部分内容,具体可参考官方文档(https://valdes-tresanco-ms.github.io/gmx_MMPBSA/dev/)
  13. 计算机基础知识(基础入门小白专属)二
  14. 表达式转换(中缀转后缀)
  15. 信息学奥赛C++编程:鸡尾酒疗法
  16. Neurosim的manual细读(四)
  17. 关于在打败C魔王前经常被背刺这件事(C语言常见问题描述及解决方案和原因)
  18. Java - 传参到底是哪种? pass by value or pass by reference
  19. FreeRTOS学习 消息队列
  20. MySql下大数据量级别(1000万+)优化查询和操作方法

热门文章

  1. 使用Python分析网易云歌曲评论信息,我发现了这些有趣的规律
  2. 如何在博客上添加小游戏【原创】
  3. KDevelop的使用(包括交叉编译)[原创]
  4. 《运营之光》-- 学习笔记(二)
  5. MFC小笔记:控件随窗口变化
  6. python游戏编程快速上手豆瓣_Python游戏编程快速上手(第4版)
  7. 【Elasticsearch】Elasticsearch 通信模块的分析
  8. 【Elasticsearch】ES 7.8 写入 查询 Normalizer 忽略 大小写
  9. [Flink] Not a valid protocol version This 1s not an HTTP port
  10. 【hortonworks/registry】NoClassDefFoundError: org/apache/zookeeper/Watcher