1、问题描述:
前一段时间要做一个excel数据导入到数据库的功能,当时用的是google chrome,没有用form表单,仅仅一个组件,上传excel时怎么也去不到文件路径,不论是从哪个驱动器上传,文件路径都是:c:\fakepath\文件名.xls。
2、解决方案
网上转悠了老半天,没找到一个完美的方案,最后经个同事指导:
利用一个js(插件)ajaxfileupload.js,源码放到最后面,先看具体代码:
jsp:
下载号码模板
选择文件:
注意: file input的name属性必须的,后面要用.
js代码:(17行用到了input的name属性)
文件上传到: url :'' +'/FileUpload?path=file/share',这里用了servlet(该servlet对FileUpload路径进行拦截)
当然可以用action
$.ajaxFileUpload方法的成功回调方法有参数data及status,其中从data可以得知上传上去的文件的名字:文件名=data.imgfunction uploadfile() {
var upload_file = $("#subfile").val();
if (upload_file == null || upload_file == undefined || upload_file == "") {
Showbo.Msg.alert('系统提示:请选择要上传的文件!');
return false;
} else {
var file = upload_file.split('.');
var suffix = file[file.length - 1];
if (suffix != 'xls') {
Showbo.Msg.alert('文件格式必须是:xls');
return;
}
// $("#fileReal").val(upload_file);
$.ajaxFileUpload( {
url : '' + '/FileUpload?path=file/share',
secureuri : true,
fileElementId : 'subfile',
dataType : 'json',
success : function(data, status) {
$('#pic').attr( {
src : '/file/share/' + data
});
$('#newfile').val(data.img);
var filename = data.img;
importSubNum(filename);
//$('#pubbt').click();
/* $('#form1').submit();*/
/*Showbo.Msg.alert('文件上传成功!');*/
},
error : function(data, status, e) {
Showbo.Msg.alert('系统提示:' + e);
return false;
}
});
}
}
当然靠上面的不够的,真正上传的幕后是(servlet):package com.hg.sale.service.upload;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
/**
* 上传Service
*
* @author lvzhibo
*
*/
public class FileUpload extends HttpServlet {
static Logger logf=Logger.getLogger(FileUpload.class);