千家信息网

web中如何解决文件上传取不到真实路径问题

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了"web中如何解决文件上传取不到真实路径问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"web中如何解决文件上传取不到真实路径问
千家信息网最后更新 2024年11月11日web中如何解决文件上传取不到真实路径问题

这篇文章主要为大家展示了"web中如何解决文件上传取不到真实路径问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"web中如何解决文件上传取不到真实路径问题"这篇文章吧。

1、问题描述:

前一段时间要做一个excel数据导入到数据库的功能,当时用的是google chrome,没有用form表单,仅仅一个组件,上传excel时怎么也去不到文件路径,不论是从哪个驱动器上传,文件路径都是:c:\fakepath\文件名.xls。

2、解决方案

网上转悠了老半天,没找到一个完美的方案,最后经个同事指导:

利用一个js(插件)ajaxfileupload.js,源码放到最后面,先看具体代码:

jsp:

下载号码模板

选择文件:

注意: file input的name属性必须的,后面要用.

js代码:(17行用到了input的name属性)

文件上传到: url : '<%=webapp%>' + '/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 : '<%=webapp%>' + '/FileUpload?path=file/share',            secureuri : true,            fileElementId : 'subfile',            dataType : 'json',            success : function(data, status) {                $('#pic').attr( {                    src : '<%=webapp%>/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 < fileName.length()) {                            fileName = fileName.substring(pos + 1);                        }                    }                                                             //author xuzijin 6.19  自定义图片名称                    File fpath=new File(path);                    if(!fpath.exists()){                        fpath.mkdir();                    }                    if(name!=null&&rename!=null){                        String[] str=fileName.split("\\.");                        int rnm=Integer.parseInt(rename);                        if(rnm<=4){                            fileName=name+"_main_"+rename+"."+str[1];                        }else{                            int rn=rnm-4;                            fileName=name+"_icon_"+rn+"."+str[1];                        }                                                                                                              }                    if(name==null&&rename!=null){                        String[] str=fileName.split("\\.");                        int rnm=Integer.parseInt(rename);                        String imgName="";                        switch(rnm){                        case 2001:                             imgName="attr_1";                               break;                        case 2002:                            imgName="attr_2";                                break;                        case 2003:                            imgName="attr_3";                                break;                        case 2004:                            imgName="attr_4";                                break;                        case 2005:                            imgName="attr_5";                                break;                        case 2006:                            imgName="attr_6";                                break;                        case 2007:                            imgName="attr_7";                                break;                        case 2008:                            imgName="attr_8";                                break;                        }                        fileName=imgName+"."+str[1];                    }                                                                                                      if(rename==null&&name==null&&log==null){                                                                     fileName=getTime()+getExtensionName(fileName);                    }                    /*if(rename==null&&name==null&&log.equals("time")){                        fileName= getFileName(fileName)+getTime()+getExtensionName(fileName);                    }*/                    response.setContentType("text/html");                    response.setCharacterEncoding("gbk");                    item.write(new File(path, fileName));                    PrintWriter out = response.getWriter();                                                             JSONObject  obj=new JSONObject();                    obj.put("img", fileName);                    out.println(obj.toString());                    logf.info("xml="+(obj.toString()));                                                                                                }            }        } catch (FileUploadException e) {            response.getWriter().print(e.toString());        } catch (Exception e) {            e.printStackTrace();            response.getWriter().print(e.toString());        }    }    public String getExtensionName(String filename) {          if ((filename != null) && (filename.length() > 0)) {              int dot = filename.lastIndexOf('.');              if ((dot >-1) && (dot < (filename.length() - 1))) {                  return filename.substring(dot);              }          }          return filename;      }                             public String getTime(){        SimpleDateFormat   formatter   =   new   SimpleDateFormat   ("yyyyMMddhh34mmss");          Date   curDate   =   new   Date(System.currentTimeMillis());//获取当前时间          String   str   =   formatter.format(curDate);         return str;    }    public String getFileName(String filename) {          if ((filename != null) && (filename.length() > 0)) {              int dot = filename.lastIndexOf('.');              if ((dot >-1) && (dot < (filename.length() - 1))) {                  return filename.substring(0,dot-1);              }          }          return filename;    }}

ajaxfileupload.js

// JavaScript DocumentjQuery.extend({                                                                        createUploadIframe: function(id, uri) {   //create frame            var frameId = 'jUploadFrame' + id;                                                                                            if(window.ActiveXObject) {                var io = document.createElement('