Java Servlet 接收上传文件
在Java中使用 Servlet 来接收用户上传的文件,需要用到两个apache包,分别是 commons-fileupload 和 commons-io 包;
如果直接在doPost中,使用request.getInputStream()获取ServletInputStream,这样获取到的Stream是不能直接写入文件的,比如上传一个txt文件,你会发现保存下来的txt文件不只有原本txt文件本身的内容,里面还有post请求的一些参数,比如参数分割符等;
下面就是一个使用fileupload包来接收文件内容的例子:
public class FileServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -4187075130535308117L;
private boolean isMultipart;
private int maxFileSize = 1024 * 1024 * 10;
private int maxMemSize = 100 * 1024; @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 检查是否有一个文件上传请求
isMultipart = ServletFileUpload.isMultipartContent(request);
String result = "";
response.setContentType("text/html;charset=utf-8");
if (!isMultipart) {
result = "未获取到文件";
response.getWriter().println(result);
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// 文件大小的最大值将被存储在内存中
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
String path = getServletContext().getRealPath("/") + "/";
factory.setRepository(new File(path));
// System.out.println(path);
// 创建一个新的文件上传处理程序
ServletFileUpload upload = new ServletFileUpload(factory);
// 允许上传的文件大小的最大值
upload.setSizeMax(maxFileSize); try {
// 解析请求,获取文件项
List fileItems = upload.parseRequest(request);
// 处理上传的文件项
Iterator i = fileItems.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (!fi.isFormField()) {
// 获取上传文件的参数
String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// 写入文件
File file = new File(path + System.currentTimeMillis() / 1000 + ".py");
fi.write(file);
}
}
result = "上传成功";
} catch (Exception ex) {
System.out.println("ex:" + ex.getMessage());
result = "上传失败";
} response.getWriter().println(result);
}
}
接下来,在html页面中,可以通过在一个表单中来提交上传文件
<form action="fileUpload" enctype="multipart/form-data" method="post">
<input type="file" name="file"></input> <input type="submit"
value="提交"></input>
</form>
Java Servlet 接收上传文件的更多相关文章
- java 网页 保存上传文件
网页请求提交到另外一个jsp 进行处理 index.jsp <%@ page language="java" import="java.util.*" p ...
- Servlet异步上传文件
这里需要用到插件ajaxfileupload.js,jar包:commons-fileupload-1.3.2.jar,commons-io-2.5.jar 注意红色部分的字!!!! 1.创建一个we ...
- Flex和Servlet结合上传文件
Flex和Servlet结合上传文件 1.准备工作 (1)下载文件上传的组件,commons-fileupload-1.3.1.jar (2)下载文件输入输出jar,commons-io-2.4.ja ...
- Spring Boot 在接收上传文件时,文件过大异常处理问题
Spring Boot 在接收上传文件时,文件过大时,或者请求过大,spring内部处理都会抛出异常,并且捕获不到. 虽然可以通过调节配置,增大 请求的限制值. 但是还是不太方便. 之所以捕获不到异常 ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Java Servlet图片上传至指定文件夹并显示图片
在学习Servlet过程中,针对图片上传做了一个Demo,实现的功能是:在a页面上传图片,点击提交后,将图片保存到服务器指定路径(D:/image):跳转到b页面,b页面读取展示绝对路径(D:/ima ...
- Servlet 实现上传文件以及同时,写入xml格式文件和上传
package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...
- Android、iOS与Servlet接口上传文件和JSON串的交互
package etcom.servlet; import java.io.File; import java.io.IOException; import java.sql.Connection; ...
随机推荐
- POJ 2728 Desert King
Description David the Great has just become the king of a desert country. To win the respect of his ...
- solrj6.2异常--Expected mime type application/octet-stream but got text/html.
org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://19 ...
- sdk 命令行
1.关闭服务命令:adb kill-server 2. 启动服务命令:adb start-server 3.查询当前设备命令:adb devices 4.安装应用程序命令:adb install [a ...
- Tinder 心动效果---卡片式view左右滑动
http://www.eoeandroid.com/thread-549316-1-1.html SlideCard.zip
- java验证码(采用struts2实现)转
第一步:编写验证码的Action package com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; ...
- 使用split进行分割时遇到特殊字符的问题
使用split分割时: String[] a="aa|bb|cc".split("|"); output: [a, a, |, b, b, |, c, c] 先 ...
- C语言实现电话本 动态开辟 信息存储于文件
下面是我用C写的一个电话本小项目,实现的功能有:添加 删除 修改 查找 排序 清空 显示,功能还是比较全的,内存也是动态开辟的.能存储于本地,能从本地读出并显示 头文件部分代码,contact.h: ...
- Linux基础命令(三)
一.常用命令—文件目录类命令 1.ls 列出指定或默认目录的文件信息 使用形式: ls [选项] [目录名] 实例: $ls $ls –als $ls /home/sq/Desktop $ls ./D ...
- ionic(一) build你的第一个android apk
1.ionic start myApp tabs >>创建一个app 2.cd myApp >>进入myApp文件 3.ionic platform add andro ...
- Android 在子线程中更新UI
今天在做练习时,在一个新开启的线程中调用“Toast.makeText(MainActivity.this, "登陆成功",Toast.LENGTH_SHORT).show();” ...