解决文件上传取不到真实路径问题(fakepath) 您所在的位置:网站首页 获取文件上传路径 解决文件上传取不到真实路径问题(fakepath)

解决文件上传取不到真实路径问题(fakepath)

2023-12-14 15:46| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有