解决文件上传取不到真实路径问题(fakepath) | 您所在的位置:网站首页 › 获取文件上传路径 › 解决文件上传取不到真实路径问题(fakepath) |
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.img function 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); private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); String param=request.getParameter("path"); String rename=request.getParameter("rename"); String name=request.getParameter("name"); String log=request.getParameter("log"); String path =""; if(param!=null){ path = request.getRealPath(param); }else{ path = request.getRealPath("/p_w_picpaths"); } // 设置文件存储位置 factory.setRepository(new File(path)); // 设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中 factory.setSizeThreshold(1024 * 1024); ServletFileUpload upload = new ServletFileUpload(factory); // 这里就是中文文件名处理的代码,其实只有一行,serheaderencoding就可以了 upload.setHeaderEncoding("gbk"); try { List items = upload.parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { } else { String fileName = item.getName(); if (fileName != null) { int pos = fileName.lastIndexOf("\\"); if (pos + 1 -1) && (dot 0)) { int dot = filename.lastIndexOf('.'); if ((dot >-1) && (dot 0 ) { setTimeout(function(){ if( !requestDone ) { // Check to see ifthe request is still happening uploadCallback( "timeout" ); } }, s.timeout); } try { var form = jQuery('#' + formId); jQuery(form).attr('action', s.url); jQuery(form).attr('method', 'POST'); jQuery(form).attr('target', frameId); if(form.encoding) { form.encoding = 'multipart/form-data'; } else { form.enctype = 'multipart/form-data'; } jQuery(form).submit(); } catch(e) { jQuery.handleError(s, xml, null, e); } if(window.attachEvent){ document.getElementById(frameId).attachEvent('onload', uploadCallback); } else{ document.getElementById(frameId).addEventListener('load', uploadCallback, false); } return {abort: function () {}}; }, uploadHttpData: function( r, type ) { var data = !type; data = type == "xml" || data ? r.responseXML : r.responseText; // ifthe type is "script", eval it in global context if( type == "script" ) { jQuery.globalEval( data ); } // Get the JavaScript object, ifJSON is used. if( type == "json" ) { eval( "data = " + data ); } // evaluate scripts within html if( type == "html" ) { jQuery("").html(data).evalScripts(); } return data; } }); |
CopyRight 2018-2019 实验室设备网 版权所有 |