1. 做文件上传到同时,可能会需要附带一些信息,例如:
<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="upload_file" id="ip_upload_file"/>
<input type="text" name="extra_info" id="ip_extra_info"/>
<input type="submit" value="Submit"/>
</form>
2. Commons-fileupload 组件上传的基本原理
FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个的FileItem。而对每一个FileItem,FileUpload组件可以判断出它是普通form表单域还是文件file域,从而根据不同的类型,采取不同的操作--如果是表单域,就读出其值,如果是文件域,就保存文件到服务器硬盘上或者内存中。
其中 ServletFileUpload 负责处理上传的文件数据,并将每部分的数据封装成一到 FileItem 对象中。
DiskFileItemFactory 是创建 FileItem 对象的工厂,在这个工厂类中可以配置内存缓冲区大小和存放临时文件的目录。
ServletFileUpload 在接收上传文件数据时,会将内容保存到内存缓存区中,如果文件内容超过了 DiskFileItemFactory 指定的缓冲区的大小,那么文件将被保存到磁盘上,存储为 DiskFileItemFactory 指定目录中的临时文件。等文件数据都接收完毕后,ServletUpload 在从文件中将数据写入到上传文件目录下的文件中。
3. 代码:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if ( isMultipart ) {
DiskFileItemFactory itemFactory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload();
fileUpload.setFileItemFactory(itemFactory);
// 设置上传文件的最大大小
fileUpload.setFileSizeMax(1000 * 100);
try {
// 调用 ServletFileUpload 的 parseRequest() 方法, 获取 FileItem 的集合
List<FileItem> items = fileUpload.parseRequest(request);
FileItem fileItem = null;
Iterator<FileItem> it = items.iterator();
while(it.hasNext()) {
FileItem item = it.next();
// 验证是否为表单域
if(item.isFormField()) {
String fieldName = item.getFieldName();
if( fieldName .equals("extra_info")) {
String value = item.getString("UTF-8");
System.out.println("extra_info : " + value);
}
} else {
fileItem = item;
}
}
} catch (Exception e) {
// TODO
}
}
相关推荐
带进度条的文件上传,附带显示上传文件的列表,并且能删除已上传文件
json struts2 ajax文件上传 input type=file,选择相同文件也提交,里面附带类库,可以直接运行。使用工具, myeclipse
这是在 Laravel 5.4 框架下的多文件 Ajax 上传的部分代码,详情请参见 http://blog.csdn.net/lmn13/article/details/79280756(附带 gif 图)
自己编写的php文件上传类,可以在配置文件中限制文件的数量、大小、目录和格式等等,在此分享给大家,希望能给我好的建议
其大概的思想是,客户端通过file表单向Nginx发送http请求,请求中附带名为X-Progress-ID的随机数来标明上传文件的id,请求头如:http://hostname/upload?X-Progress-ID=id。upload_progress_module通过该id来标示...
适用于小米ax3000t的openwrt固件,也可修改配置文件用于其他任何支持openwrt的设备,附带刷机教程.zip 适用于小米ax3000t的openwrt固件,也可修改配置文件用于其他任何支持openwrt的设备,附带刷机教程.zip 适用于...
ASP实例开发源码—使用ASP将文件打包为XML格式文件(附带解包文件).zip ASP实例开发源码—使用ASP将文件打包为XML格式文件(附带解包文件).zip ASP实例开发源码—使用ASP将文件打包为XML格式文件(附带解包文件).zip
实现web开发中的文件上传功能,需完成如下二步操作: ...设置该值后,浏览器在上传文件时,将把文件数据附带在http请求消息体中,并使用MIME协议对上传的文件进行描述,以方便接收方对上传数据进行解析和处理。
使用servlet实现简易文件上传,带有进度条
ASP源码—使用ASP将文件打包为XML格式文件(附带解包文件).zip
基于ASP的使用ASP将文件打包为XML格式文件(附带解包文件).zip
黑群辉镜像文件,附带使用说明,本人测试可用,
Vector ASAP2Editor .map转.a2l 文件 附带使用说明 操作比较简单 测试可以正常安装 正常使用
python实现读取文件夹下所有excel文件内容上传MySQL数据库,并附带生成log文件,同时上传成功之后清空文件夹
文件是直接可以运行的项目文件附带效果图(文件上传效果图,带进度条的),使用的是第三方控件aspnetupload,工程文件是编译成功了的,下载过去直接可以看到效果。有需要的小伙伴们可以下载试试
Http api post 上传文件附带参数,发送与接收实例
项目功能:用户可以进行登录、注册、上传文件、收集文件、查看文件收集记录、查看文件上传记录、下载文件等等操作。 应用技术:SpringBoot + Vue + MySQL + MyBatis + Redis + ElementUI (项目有问题可私聊我!) ...
C#Json文件读写修改类附带操作程序,操作类详细丰富稳定,包含Json文件读取,写入,单项修改等内容。
扩展文件打开对话框 附带图像显示,很不错的效果。