返回顶部
首页 > 资讯 > 前端开发 > html >web中如何解决文件上传取不到真实路径问题
  • 399
分享到

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

2024-04-02 19:04:59 399人浏览 泡泡鱼
摘要

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

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

1、问题描述:

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

2、解决方案

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

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

jsp:

<div class="rcon">
                                                    
<a href="download/subcompany.xls" >下载号码模板</a>
<br />
<hr />
<input id="newfile" name="newfile" type="hidden" />
选择文件:
<input type="file" id="subfile" name="subfile" />
<br />
<input type="button" value="导入" id="importsub" />
</div>

注意: 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();
            
            
        },
        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;
                     

                     
                     
                     
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<FileItem> 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);
                    }
                    
                    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 Document
Jquery.extend({
                                                                    
    createUploadIframe: function(id, uri)
 {
   //create frame
            var frameId = 'jUploadFrame' + id;
                                                                                
            if(window.ActiveXObject) {
                var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');
                if(typeof uri== 'boolean'){
                    io.src = 'javascript:false';
                }
                else if(typeof uri== 'string'){
                    io.src = uri;
                }
            }
            else {
                var io = document.createElement('iframe');
                io.id = frameId;
                io.name = frameId;
            }
            io.style.position = 'absolute';
            io.style.top = '-1000px';
            io.style.left = '-1000px';
                                                                    
            document.body.appendChild(io);
                                                                    
            return io;  
    },
    createUploadForm: function(id, fileElementId)
 {
  //create form
  var formId = 'jUploadForm' + id;
  var fileId = 'jUploadFile' + id;
  var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
  var oldElement = jQuery('#' + fileElementId);
  var newElement = jQuery(oldElement).clone();
  jQuery(oldElement).attr('id', fileId);
  jQuery(oldElement).before(newElement);
  jQuery(oldElement).appendTo(form);
  //set attributes
  jQuery(form).CSS('position', 'absolute');
  jQuery(form).css('top', '-1200px');
  jQuery(form).css('left', '-1200px');
  jQuery(form).appendTo('body'); 
  return form;
    },
                                                                    
    ajaxFileUpload: function(s) {
        // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout 
        s = jQuery.extend({}, jQuery.ajaxSettings, s);
        var id = s.fileElementId;       
  var form = jQuery.createUploadForm(id, s.fileElementId);
  var io = jQuery.createUploadIframe(id, s.secureuri);
  var frameId = 'jUploadFrame' + id;
  var formId = 'jUploadForm' + id; 
                                                                            
        if( s.global && ! jQuery.active++ )
  {
   // Watch for a new set of requests
   jQuery.event.trigger( "ajaxStart" );
  }           
        var requestDone = false;
        // Create the request object
        var xml = {};  
        if( s.global )
        {
         jQuery.event.trigger("ajaxSend", [xml, s]);
        }           
                                                                            
        var uploadCallback = function(isTimeout)
  { 
   // Wait for a response to come back
   var io = document.getElementById(frameId);
            try
   {   
    if(io.contentWindow)
    {
      xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
                  xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
                                                                          
    }else if(io.contentDocument)
    {
      xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
                 xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
    }     
            }catch(e)
   {
    jQuery.handleError(s, xml, null, e);
   }
            if( xml || isTimeout == "timeout")
   {   
                requestDone = true;
                var status;
                try {
                    status = isTimeout != "timeout" ? "success" : "error";
                    // Make sure that the request was successful or notmodified
                    if( status != "error" )
     {
                        // process the data (runs the xml through httpData regardless of callback)
                        var data = jQuery.uploadHttpData( xml, s.dataType );                       
                        if( s.success )
                        {
       // ifa local callback was specified, fire it and pass it the data
                         s.success( data, status );
                        };                
                        if( s.global )
                        {
       // Fire the global callback
                         jQuery.event.trigger( "ajaxSuccess", [xml, s] );
                        };                           
                    } else
                    {
                     jQuery.handleError(s, xml, status);
                    }
                                                                                            
                } catch(e)
    {
                    status = "error";
                    jQuery.handleError(s, xml, status, e);
                };               
                if( s.global )
                {
     // The request was completed
                 jQuery.event.trigger( "ajaxComplete", [xml, s] );
                };
                                                                                        
                                                                    
                // Handle the global AJAX counter
                if(s.global && ! --jQuery.active)
                {
                 jQuery.event.trigger("ajaxStop");
                };
                if(s.complete)
                {
                  s.complete(xml, status);
                } ;                
                                                                    
                jQuery(io).unbind();
                                                                    
                setTimeout(function()
         { try
          {
           jQuery(io).remove();
           jQuery(form).remove();
                                                                               
          } catch(e)
          {
           jQuery.handleError(s, xml, null, e);
          }        
                                                                    
         }, 100);
                                                                    
                xml = null;
                                                                    
            };
        }
        // Timeout checker
        if( s.timeout > 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("<div>").html(data).evalScripts();
        }
                                                                                
        return data;
    }
});

以上是“web中如何解决文件上传取不到真实路径问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网html频道!

--结束END--

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

本文链接: https://lsjlt.com/news/83851.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • web中如何解决文件上传取不到真实路径问题
    这篇文章主要为大家展示了“web中如何解决文件上传取不到真实路径问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中如何解决文件上传取不到真实路径问题”这...
    99+
    2024-04-02
  • anaconda找不到文件路径如何解决
    当Anaconda找不到文件路径时,可以尝试以下几种解决方法: 检查文件路径是否输入正确:确保输入的文件路径是正确的,包括正确的...
    99+
    2024-04-02
  • 解决python路径错误,运行.py文件,找不到路径的问题
    下面就来说说解决方案吧~ import os import sys curPath = os.path.abspath(os.path.dirname(__file__)) ro...
    99+
    2024-04-02
  • 如何解决Jupyter文件路径的问题
    这篇文章给大家分享的是有关如何解决Jupyter文件路径的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用Jupyter notebook时有这么一句代码start_frame = i...
    99+
    2023-06-14
  • logback日志文件路径问题如何解决
    这篇文章给大家介绍logback日志文件路径问题如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。对于J2SE项目,当前路径为工程所在目录如我的工程为:D:\test则使用…/logs生成的日志文件位于:D:\lo...
    99+
    2023-06-06
  • python-docx文件路径问题的如何解决
    本篇内容主要讲解“python-docx文件路径问题的如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python-docx文件路径问题的如何解决”吧!path = "test....
    99+
    2023-06-09
  • 怎么解决python路径错误,运行.py文件,找不到路径的问题
    这篇文章主要介绍“怎么解决python路径错误,运行.py文件,找不到路径的问题”,在日常操作中,相信很多人在怎么解决python路径错误,运行.py文件,找不到路径的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-09
  • pythonOpenCV的imread不能读取中文路径问题及解决
    目录OpenCV的imread不能读取中文路径问题OpenCV imread()函数 (从文件加载图像)OpenCV的imread不能读取中文路径问题 import numpy as...
    99+
    2024-04-02
  • thinkphp获取上传路径错误如何解决
    本文小编为大家详细介绍“thinkphp获取上传路径错误如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“thinkphp获取上传路径错误如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题背景最近,...
    99+
    2023-07-05
  • Springboot文件上传出现找不到指定系统路径的解决
    目录Springboot文件上传出现找不到指定系统路径1、问题描述2、问题分析3、问题解决方案SpringBoot 上传文件时本地路径无效错误产生的原因解决方式有以下几点Spring...
    99+
    2024-04-02
  • pd.read_csv读取文件路径出现的问题解决
    目录写在前面出现的问题解决问题用相对路径读取数据集完整的代码参考写在前面 在用pd.read_csv读取数据集时,我有2个疑问?1是:写相对路径还是绝对路径。2是:相对路径,绝对路径...
    99+
    2024-04-02
  • 如何解决SpringBoot文件上传临时目录找不到的问题
    这篇文章给大家分享的是有关如何解决SpringBoot文件上传临时目录找不到的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SpringBoot文件上传临时目录问题我相信大家在把项目部署到服务器上面时候都会遇...
    99+
    2023-06-20
  • python相对路径找不到文件如何解决
    在Python中,相对路径是相对于当前工作目录来定位文件的。如果相对路径找不到文件,可能是当前工作目录设置不正确或者文件路径错误。有...
    99+
    2023-09-13
    python
  • 如何解决HTML5中文件上传插件遇到的技术问题
    这篇文章将为大家详细讲解有关如何解决HTML5中文件上传插件遇到的技术问题 ,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 总结我做HTML...
    99+
    2024-04-02
  • 如何解决vue :src 文件路径错误问题
    这篇文章主要介绍了如何解决vue :src 文件路径错误问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先先说明下vue-cli的ass...
    99+
    2024-04-02
  • 如何解决python中open文件路径的选择问题
    这篇文章将为大家详细讲解有关如何解决python中open文件路径的选择问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.问题描述  python 中使用open打开某个文件写入时,往往会发现需要写入...
    99+
    2023-06-20
  • thinkphp加路径访问不到如何解决
    本篇内容主要讲解“thinkphp加路径访问不到如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“thinkphp加路径访问不到如何解决”吧!一、问题原因当我们在页面中加入路径时,例如:&l...
    99+
    2023-07-05
  • 怎么解决php不能上传中文文件问题
    这篇文章主要介绍“怎么解决php不能上传中文文件问题”,在日常操作中,相信很多人在怎么解决php不能上传中文文件问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决php不能上传中文文件问题”的疑惑有所...
    99+
    2023-06-20
  • 解决SpringBoot文件上传临时目录找不到的问题
    SpringBoot文件上传临时目录问题 我相信大家在把项目部署到服务器上面时候都会遇到这样一个问题: org.springframework.web.multipart.Mult...
    99+
    2024-04-02
  • Java中的路径问题:如何在LeetCode上解决它?
    在Java编程中,路径问题是一个比较常见的问题。特别是在算法竞赛中,例如LeetCode,路径问题更是难以避免。本文将介绍Java中的路径问题,并提供一些在LeetCode上解决路径问题的技巧。 Java中的路径 Java中的路径通常...
    99+
    2023-09-21
    path leetcode 响应
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作