100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > JQuery专栏之十五————利用文件框控件file实现文件的上传

JQuery专栏之十五————利用文件框控件file实现文件的上传

时间:2021-06-26 21:06:56

相关推荐

JQuery专栏之十五————利用文件框控件file实现文件的上传

15. 利用文件框控件file实现文件的上传。

文件上传的方法有很多,jQuery也有许多文件上传控件。本例采用最基本的HTML文件框(<input type='file')实现文件上传,不限制上传文件的类型和大小。具体地,在表单myForm1中添加一个学生组合框,每个学生可以上传一个照片的图形文件到服务器端,图形文件以学号命名。点击“上传”按钮后,客户端调用服务器端程序Easyui_fileUpload.jsp文件。当文件上传成功后,通过调用 myresizeImage()函数将图形等比例缩放后在表单规定位置中显示出来。客户端程序实现的主要方法如下:

①使用jsp语句获取工程文件路径,在javascript中获取此值,以便设置照片上传后在服务器端存放的路径。

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+

request.getServerPort()+path+"/";

%>

<script>

var photopath='<%=basePath %>'+'mybase/students/';

</script>

②定义表单、学号组合框及图片等控件。

③在表单myForm1中添加一个文件选择框控件file1(input type="file"),同时添加一个“上传”按钮。绑定file1控件的change事件,只有当选择的文件为非空时,“上传”按钮才处理激活状态。编写“上传”按钮的点击事件,点击调用fnUpload()函数开始上传文件。

$("#myForm1").append('<input type="file" id="file1" style="position: absolute; top:260px; left:16px;

width: 200px; padding-left: 4px;" />');

myButton('btnupload','myForm1','上传',260,440,25,65,'uploadIcon','');

$('#file1').bind('change',function(v){

var filename = $("#file1").val();

if (filename=='') $("#btnupload").linkbutton('disable');

else $("#btnupload").linkbutton('enable');

});

$('#btnupload').bind('click',function(e){ //绑定“上传”按钮的点击事件

fnUpload();

});

④编写fnUpload()程序。先获取文件扩展名并作判断,然后使用FormData()方法和XMLHttpRequest对象,调用后台服务器端程序system//Easyui_fileUpLoad.jsp,将目标文件名和照片文件存放路径两个参数传递给该程序。服务器端上传文件成功后,返回文件的有关信息(如文件大小、文件扩展名等),并将文件选择控件置空、“上传”按钮为未激活状态,结束文件上传过程。由于游览器缓存图片,新上传的图片不能马上在客户端显示出来,需要在图片地址src中添加一个时间戳(timestemp)。

var fileext=filename.substring(filename.lastIndexOf(".")+1,255).toLowerCase();//文件扩展名

var fileObj = $("#file1")[0].files[0]; // 获取文件对象

var form = new FormData(); // FormData 对象

form.append("file", fileObj);// 文件对象

var xhr = new XMLHttpRequest(); //XMLHttpRequest 对象

xhr.open("post", "system//Easyui_fileUpLoad.jsp?targetname="+targetname+"&targetpath=mybase/students", true);

xhr.onload = function () {

if(xhr.status == 200){

var data = JSON.parse(xhr.responseText);

if (data.error == 0) { //上传成功

var src=photopath+$("#stuid").combobox("getValue")+'.jpg?timestemp='+

new Date().getTime();

$("#image1").attr('src',src);

resizeImage('image1',src,231,224);

$.messager.show({

title:'系统提示',

width:200,

msg:'文件已经上传成功!',

timeout:2000,

showType:'slide'

});

console.log('文件上传成功!'+src+',文件大小:'+data.filesize);

}else{

$.messager.alert('系统提示','文件已上传失败!','error');

console.log(data.message);

}

$("#file1").val(' ');

}

};

xhr.send(form);

程序2-15.文件上传服务器端程序Easyui_fileUpLoad.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ page import="java.io.*"%>

<%@ page import="net.sf.JSON.JSONObject"%>

<%@ page import="mons.fileupload.FileItem"%>

<%@ page import="mons.fileupload.disk.DiskFileItemFactory"%>

<%@ page import="mons.fileupload.servlet.ServletFileUpload"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

String targetpath = request.getParameter("targetpath"); //目标路径

String targetname = request.getParameter("targetname"); //目标文件名称

System.out.println("target="+targetpath);

String savePath = this.getServletContext().getRealPath(targetpath);

File file = new File(savePath);

//判断上传文件的保存目录是否存在

if (!file.exists() && !file.isDirectory()) {

System.out.println(savePath+"目录不存在,需要创建");

file.mkdir(); //创建目录

}

String message = ""; //消息提示

int error = 0;

String targetfilename="";

String fileext="";

long xsize=0;

try{

//使用Apache文件上传组件处理文件上传步骤:

//1、创建一个DiskFileItemFactory工厂

DiskFileItemFactory factory = new DiskFileItemFactory();

//2、创建一个文件上传解析器

ServletFileUpload upload = new ServletFileUpload(factory);

//解决上传文件名的中文乱码

upload.setHeaderEncoding("UTF-8");

//3、判断提交上来的数据是否是上传表单的数据

if(!ServletFileUpload.isMultipartContent(request)){

//按照传统方式获取数据

return;

}

//4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,

//每一个FileItem对应一个Form表单的输入项

List<FileItem> list = upload.parseRequest(request); //compiler5.0级以上支持

for(FileItem item : list){

//如果fileitem中封装的是普通输入项的数据

if(item.isFormField()){

String name = item.getFieldName();

//解决普通输入项的数据的中文乱码问题

String value = item.getString("UTF-8");

//value = new String(value.getBytes("iso8859-1"),"UTF-8");

System.out.println(name + "=" + value);

}else{//如果fileitem中封装的是上传文件

//得到上传的文件名称和扩展名

String filename = item.getName();

fileext=filename.substring(filename.lastIndexOf(".")+1,filename.length()).toLowerCase();

targetfilename=filename;

if (!targetname.trim().equals("")) targetfilename=targetname+"."+fileext; //目标文件名

if(filename==null || filename.trim().equals("")){

continue;

}

//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt

//处理获取到的上传文件的文件名的路径部分,只保留文件名部分

filename = filename.substring(filename.lastIndexOf("\\")+1);

//获取item中的上传文件的输入流

InputStream in = item.getInputStream();

//创建一个文件输出流

//FileOutputStream out1 = new FileOutputStream(savePath + "\\" + filename);

FileOutputStream out1 = new FileOutputStream(savePath + "\\" + targetfilename);

//创建一个缓冲区

byte buffer[] = new byte[1024];

//判断输入流中的数据是否已经读完的标识

int len = 0;

//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据

while((len=in.read(buffer))>0){

//使用FileOutputStream输出流

//将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中

out1.write(buffer, 0, len);

}

in.close(); //关闭输入流

out1.close(); //关闭输出流

item.delete(); //删除处理文件上传时生成的临时文件

message = "文件上传成功!";

File xfile = new File(savePath + "\\" + targetfilename);

xsize=xfile.length();

}

}

}catch (Exception e) {

message= "文件上传失败!";

error = 1;

e.printStackTrace();

}

//确定返回内容JSON格式

Map map = new HashMap();

map.put("error", error);

map.put("message", message);

map.put("targetfilename", targetfilename);

map.put("fileext", fileext);

if (xsize<=1024) map.put("filesize", xsize+"B");

else if (xsize<=1024*1000) map.put("filesize", xsize/1024.00+"KB");

else map.put("filesize", xsize/1024/1024.00+"MB");

JSONObject JSON = JSONObject.fromObject(map);

response.setContentType("text/html; charset=utf-8");

PrintWriter pw = response.getWriter();

System.out.print(JSON.toString());

pw.write(JSON.toString());

%>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。