//这是看的大神的。
//原地址:https://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html $("#sub").click(function(){
$.ajaxFileUpload({
url:'<%=_basePath%>uploadZiZhi',
secureuri:false,//是否启用安全机制
fileElementId:'file',//file的id
dataType: 'json/text',//返回的类型
success: function (data) {//调用成功时怎么处理
//alert(data)
var jo = eval("("+data+")");
alert(jo.name)
window.opener.backsPort('<%=inputId%>',data.id,data.name);
window.close();
} });
});

<script src="${pageContext.request.contextPath}/po/js/jquery.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/po/js/ajaxfileupload.js" type="text/javascript"></script>

后台代码

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { System.out.println("上传资质------------");
Session session= new Session(PoConnection.get());
String userid = request.getParameter("userid");
String type = request.getParameter("type");
if("license".equals(type)){
//营业执照
type="1";
}else if("authorization".equals(type)){
//委托代理人授权书
type="2";
}else if("qualifications".equals(type)){
//产品或施工资质
type="3";
}else if("bankInfo".equals(type)){
//开户行信息
type="4";
}else{
throw new RuntimeException("上传失败!");
}
//删除原来资质附件
session.executeUpdate("delete from PO_SRM_INFO_FILE where type='"+type+"'AND FK_SRM="+userid);
// 1 创建解析器工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 1.1 配置上传流在接收时缓冲区的大小 => 默认是10kb
factory.setSizeThreshold(1024 * 10);
// 1.2 配置上传时临时文件所在的目录 => 制定一个地址
// factory.setRepository(new File("e://temp"));
// 获得java 临时文件所在的目录
String sysTem = System.getProperty("java.io.tmpdir");
System.out.println(sysTem);
// ------------------------------------------------------------------
// 2 创建解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 2.1 判断当前request对象是否是多段式请求
if (!upload.isMultipartContent(request)) {
throw new RuntimeException("您不是多段是请求!");
}
// 设置段头使用什么码表编码 => 默认Latin码表
upload.setHeaderEncoding("utf-8");
// 设置文件的大小 , 上传时如果超过这个大小会抛出异常
upload.setFileSizeMax(1024 * 1000*10);// 设置单个上传文件的大小
upload.setSizeMax(1024 * 1000*10);// 设置单次上传的总文件大小
// 解析request对象 => 会把多段式中的每一个段都封装成一个FileItem对象
List<FileItem> list = null;
try {
list = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
// ----------------------------------------------------
// FileItem 代表多段式提交中每段内容
StringBuilder idStr = new StringBuilder();
StringBuilder fileNameStr = new StringBuilder(); PreparedStatement pstmt = null;
if (list != null) {
for (FileItem item : list) {
if (item.isFormField()) {
// 普通表单字段
String key = item.getFieldName();// 获得普通表单字段中的键
String value = item.getString("Utf-8");// 获得普通表单字段中的值----指定编码解决中文乱码的问题
} else {
// 文件上传段
String fileName = item.getName();
if(EcUtil.isEmptyString(fileName)){
throw new RuntimeException("未选择文件!");
}
// System.out.println("上传的文件名称:"+fileName);
String filetype = fileName.substring(fileName.lastIndexOf(".")+1); // 获得文件的内容
InputStream is = item.getInputStream(); //TODO 将数据存入数据库
String id = session.queryForColumn(String.class, " SELECT PO_SRM_INFO_FILE_SEQ.NEXTVAL from dual"); String sql = "insert into PO_SRM_INFO_FILE(ID,CONTENT,TITLE,OP_TIME,TYPE,DELSTATUS,FK_SRM,FILETYPE) values("+id+",?,?,?,?,?,?,?)";
try { ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int n = 0;
while (-1 != (n = is.read(buffer))) {
output.write(buffer, 0, n);
}
pstmt = session.currentConnection().prepareStatement(sql);
pstmt.setBinaryStream(1, new ByteArrayInputStream(output.toByteArray()),output.toByteArray().length);
pstmt.setString(2, fileName);
pstmt.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
pstmt.setString(4, type);
pstmt.setString(5, "0");
pstmt.setString(6, userid);
pstmt.setString(7, filetype);
pstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
session.roolback();
} // 关闭流
is.close();
// 删除临时文件
item.delete(); //返回的id和文件名拼接
if(fileNameStr.length() > 0){
fileNameStr.append(",").append(fileName);
}else{
fileNameStr.append(fileName);
}
if(idStr.length() > 0){
idStr.append(",").append(id);
}else{
idStr.append(id);
} }
}
}
//写出
JSONObject jo = new JSONObject();
jo.put("id", idStr.toString());
jo.put("name", fileNameStr.toString());
response.getWriter().write(jo.toString());
return;
}

通过ajax提交表单上传文件的更多相关文章

  1. 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType

    回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...

  2. 一个ajax实现表单上传文件的神器 formdata

    通过传统的form表单提交的方式上传文件: $.ajax({ url : "http://localhost:8080/STS/rest/user", type : "P ...

  3. libcurl提交表单上传文件

    不多说了,curl的http上传文件代码示例,有需要的可以参考. int http_post_file(const char *url, const char *user, const char *p ...

  4. 使用jquery.form.js提交表单上传文件

    方法: 1.formSerilize()  用于序列化表单中的数据,并将其自动整理成适合AJAX异步请求的URL地址格式. 2.clearForm()   清除表单中所有输入值的内容. 3.restF ...

  5. django 基于form表单上传文件和基于ajax上传文件

    一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...

  6. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  7. 使用form表单上传文件

    在使用form表单上传文件时候,input[type='file']是必然会用的,其中有一些小坑需要避免. 1.form的 enctype="multipart/form-data" ...

  8. JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器

    昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...

  9. Express下使用formidable实现POST表单上传文件并保存

    Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...

随机推荐

  1. Effective java 系列之更优雅的关闭资源-try-with-resources

    背景: 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在 ...

  2. LINQ to Entities 不识别方法“System.DateTime AddDays(Double)

    今天本想在linq里按照时间筛选一下超时的数据,一共两个字段FeedBackTime(计划反馈时间).EndTime(实际反馈时间).需求是这样的,查找数据库里所有EndTime大于FeedBackT ...

  3. python实现汉诺塔问题

    汉诺塔问题可以简单描述成为将a柱子上的圆盘按一定规则借助b柱子完美地复制到c柱子上.现假设有a,b,c三根柱子,a柱子上的圆盘从上到下依次标号为1,2,3,……,n,且为递增状态.规则:每次移动一个盘 ...

  4. 『TensorFlow』专题汇总

    TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...

  5. imp、exp命令导出优化

    本文对Oracle数据的导入导出 imp ,exp 两个命令进行了介绍, 并对其对应的參数进行了说明,然后通过一些演示样例进行演练,加深理解.文章最后对运用这两个命令可能出现的问题(如权限不够,不同o ...

  6. 一个简单的C语言程序(详解)

    C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h> int main(void) //一个简单的 C程序 { int num; //定义一个名为 ...

  7. 为二级域名注册ssl证书,并强制使用https对http进行跳转

    服务器上仍然使用nginx进行代理 1.为二级域名申请ssl证书,如blog.yourdomain.com,见前文. 2.在域名解析服务中,为二级域名添加解析记录 3.nginx默认读取/etc/ng ...

  8. WinForm界面设计-Button添加背景图去边框

    转自:https://www.cnblogs.com/tommy-huang/p/4283538.html 1.既然是添加背景图片 所以这里应该使用 Button.BackgroudImage = & ...

  9. php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)

    上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/  baidu.p ...

  10. Linux下手动编译shogun

    手动编译shogun,如果按照直接按照官网上的步骤进行,会踩非常多的坑,下面分享一下在下的编译过程,希望能为阁下提供些许借鉴. 1. git clone https://github.com/shog ...