一、使用原因:

文件上传时,表单的属性中必须要有multipart/form-data,如以下例子:

<form name="form_post" class="am-form am-form-horizontal"

enctype="multipart/form-data" method="post" action="Addnews">

但是加上该属性以后,表单中所有数据都会以二进制的形式上传,表单中的input类型数据就无法上传。此时就要用到jspsmartupload这个组件,可以确保同时提交两种数据。

二、使用方法:

1.下载jspsmartupload.jar包,导入到该项目中。

2.在文件上传的servlet中如下写。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
request.setCharacterEncoding("gbk"); /*---------------------------------------------文件上传----------------------------------*/
SmartUpload smart=new SmartUpload(); //PageContext是jsp的内置对象,在servlet不能直接使用,需要做一些处理
JspFactory _jspxFactory = null;
PageContext pageContext = null;
_jspxFactory = JspFactory.getDefaultFactory();
pageContext = _jspxFactory.getPageContext(this,request,response,"",true,8192,true); smart.initialize(pageContext);//初始化上传操作
try {
smart.upload();
} catch (SmartUploadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
IpTimeStamp its=new IpTimeStamp(InetAddress.getLocalHost().getHostAddress());//request.getRemoteAddr()获得用户的ip地址
//System.out.println("获取的ip为"+InetAddress.getLocalHost().getHostAddress());
//如果要实现文件的批量上传,则只需用for循环,将getFile(0)中的0改为i即可
String ext=smart.getFiles().getFile(0).getFileExt();//此为得到文件的扩展名,getFile(0)为得到唯一的一个上传文件
String fileName=its.getIpTimeRand()+"."+ext;
//System.out.println("获取 的文件名为"+fileName);
//this.getServletContext().getRealPath("/")为得到tomcat的跟目录,放于upload文件夹中,java.io.File.separator是一种安全操作
//String realPath="";
//this.getServletContext().getRealPath("/")+
try {
smart.getFiles().getFile(0).saveAs(".\\WEB-INF\\upload\\"+java.io.File.separator+fileName);
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String realPath="D:\\Program Files (x86)\\tomcat\\webapps\\MyData\\WEB-INF\\upload"+fileName+""; /*-------------------------接受表单数据---------------------------------------------------*/ String title=smart.getRequest().getParameter("title");
String range=smart.getRequest().getParameter("range");
String time=smart.getRequest().getParameter("time");
String source=smart.getRequest().getParameter("source");
String area=smart.getRequest().getParameter("area");
String content=smart.getRequest().getParameter("content");
/*ChangeEncoder cn=new ChangeEncoder();
title=cn.getUTF8StringFromGBKString(title);
source=cn.getUTF8StringFromGBKString(source);
area=cn.getUTF8StringFromGBKString(area);
content=cn.getUTF8StringFromGBKString(content);
System.out.println(title);
System.out.println(range);
System.out.println(time);
System.out.println(source);
System.out.println(area);*/
}

三、注意事项

1默认的jspsmartupload是以gbk的形式上传的数据,所以在文件上传的jsp页面中设置编码为gbk,在servlet中设置接收的编码也为gbk.否则会出现乱码。

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>

request.setCharacterEncoding("gbk");

jspsmartupload 文件上传让input数据和文件上传同时提交的更多相关文章

  1. php总结7——文件函数库、序列化数据、文件包含

    7.1 文件函数库 php用来操作文件的 1) fopen    代开文件或URL 格式:resource fopen(string $filename, string $mode) 'r' 只读方式 ...

  2. 用js通过url传参把数据从一个页面传到另一个页面

    好长时间没写博客了,时值五一,外面到处人山人海,本宝宝还是好好呆在家学习吧.好了,言归正传.在没有后台支持的情况下,如何实现从一个页面像另一个页面来传递数据呢?应该很多人遇到过这个问题吧.那我就来说说 ...

  3. [PHP学习教程 - 文件]001.高速读写大数据“二进制”文件,不必申请大内存(Byte Block)

    引言:读写大“二进制”文件,不必申请很大内存(fopen.fread.fwrite.fclose)!做到开源节流,提高速度! 每天告诉自己一次,『我真的很不错』.... 加速读写大文件,在实际工作过程 ...

  4. shell脚本,awk实现文件a的每行数据与文件b的相对应的行的值相减,得到其绝对值。

    解题思路 文件 shu 是下面这样的.220 34 50 70553 556 32 211 1 14 98 33 文件 jian是下面这样的.1082 想要得到结果是下面这样的.210 24 40 6 ...

  5. Django项目:CMDB(服务器硬件资产自动采集系统)--11--07CMDB文件模式测试采集硬件数据

    #settings.py # ————————01CMDB获取服务器基本信息———————— import os BASEDIR = os.path.dirname(os.path.dirname(o ...

  6. html 文件上传框 input标签

    文件上传框 有时候,需要用户上传自己的文件,文件上传框看上去和其它 文本域差不多,只是它还包含了一个浏览按钮.访问者可以通 过输入需要上传的文件的路径或者点击浏览按钮选择需要上传 的文件. 代码格式: ...

  7. 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME

    原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...

  8. from表单实现无跳转上传文件,接收页面后台数据。

    本文基于我刚写的http://www.cnblogs.com/iwang5566/p/6287529.html进行了简单的扩展,实现页面无跳转表单数据提交,并接收后台返回的数据. 下载好,上一篇文章d ...

  9. 01- ajax, 登录验证,json数据,文件上传

    1.ajax简介 1.向服务器发送请求的途径 # 向服务器发送请求的途径 1. 浏览器地址栏,默认get请求 2. form表单: get请求 post请求 3. a标签,默认get请求 4. Aja ...

随机推荐

  1. Unity5 怎样做资源管理和增量更新

    工具 Unity 中的资源来源有三个途径:一个是Unity自己主动打包资源.一个是Resources.一个是AssetBundle. Unity自己主动打包资源是指在Unity场景中直接使用到的资源会 ...

  2. js自己定义插件-选项卡

    该功能比較简单.巩固一下jquery插件写法,注意引入的jquery.js  . 自己定义插件路径代码例如以下: 页面: <!doctype html> <html> < ...

  3. Android异步处理三:Handler+Looper+MessageQueue深入详解

    在<Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面>中,我们讲到使用Thread+Handler的方式来实现界面的更新,其实是在非UI线程发送消息到U ...

  4. window下php5安装redis扩展 设置自启动服务

    最近想在5.6版本的开发环境装一下redis的扩展,结果找了半天都是失效链接,特此做下备份 5.3-5.6 https://pecl.php.net/package/redis/2.2.7/windo ...

  5. 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数

    typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...

  6. Throwing Dice(概率dp)

    C - Throwing Dice Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Lig ...

  7. css 坑记

    1. div 内容超出 (做换行处理)   要注意 white-space属性的运用 设置 div width:100%;(或者固定值) 设置换行  word-break: break-all; 设置 ...

  8. java Filter的简单使用

    java web中的过滤器的简单使用.直接上代码.1.web.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. ArcGIS API for javascript Bookmarks(书签)示例2

    1.运行效果图 说明:这篇博文介绍的书签位于地图之上 有关博文中引用的API文件 怎么iis上部署,请参考我前面的博文 2.HTML代码 <!DOCTYPE html> <html ...

  10. 程序运行之ELF 符号表

    当一个工程中有多个文件的时候,链接的本质就是要把多个不同的目标文件相互粘到一起.就想玩具积木一样整合成一个整体.为了使不同的目标文件之间能够相互粘合,这些目标文件之间必须要有固定的规则才行.比如目标文 ...