关于读取上传文件问题的两个解决办法

为什么要写这样一个博客呢,因为在J2EE开发中,我在获取文件的本地路径时,发现获取不到。

明明是在其他盘符下的文件,可是在用js获取文件路径的时候,会得到一个fakepath的目录,查了资料才知道这个是后来浏览器为了安全不给显示文件的全路径了,这TM的就很尴尬了,比如我在后台只想要这个文件的路径的时候,给我的是 一个假路径,尴不尴尬

这是我在做Excel导入的时候,需要一个文件的完整路径,我想从本地获取这个文件的完整路径,结果被浏览器给玩了。

后来,我想到的一个很无奈的办法就是,本地的路径我取不到,我上传到服务器的路径我总能取得到吧,于是乎,我将文件上传到了服务器。

于是我在选择文件的时候,监听ID位file的input的change时间,在change事件中,就将文件上传,然后将上传后的文件路径返回到前台,点击导入的时候,再将路径传递过去,现在回想一下,我当时是怎么想到这个方法的呢?真是奇葩,不过无所谓,也解决了所谓的问题。下面是代码:

HTML代码:<form id="myform"  method="post" enctype="multipart/form-data">
        <input style="float: right;margin-right: 115px;" id="file" type="file" name="file">
    </form>
    <input type="hidden" id="myLoad">
    <div class="cdgl-right">
        <div class="addto-btn">
            <a href="javascript:;" onclick="addItem()" class="addto"><i class="sprite-main"></i>导入数据</a>
        </div>
        <div class="cdgltable">
            <table id="studentList" class="m-list" ></table>
            <div id="gridpager"></div>
        </div>
    </div>
JS代码:$("#file").change(function(){
var fils=$("#file").get(0).files[0];
        var formData = new FormData($("#myform")[0]);
        $.ajax({
            url : "../import/uploadLoad",
            type : "post",
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            success : function(data) {
                $("#myLoad").val(data);
            },
            error : function(error) {
                alert(error.responseText);
            },
            async : false
        });
    });
Java代码:@RequestMapping(value = "/uploadLoad")
    public String uploadLoad(MultipartFile file,HttpServletRequest request) throws IOException{
        String path = request.getSession().getServletContext().getRealPath("uploadimg");
        String fileName = file.getOriginalFilename();
        File dir = new File(path,fileName);
        if(!dir.exists()){
            dir.mkdirs();
        }
        file.transferTo(dir);
        return path+File.separator+fileName;
    }

后来就这么莫名其妙的解决了这个问题。

上面的代码是我在做毕业设计的时候做的一个文件导入异步刷新显示的一个功能,后来工作了之后,公司需要把project文件,也就是mpp文件导入到系统中,也是在读取本地文件的测试后,我发现,在读取project文件的时候,支持文件流的格式进行读取,于是乎,我将获取文件路径改成获取文件流。

@RequestMapping(value = "/uploadLoadByInputStream")
    public InputStream uploadLoadByInputStream(MultipartFile file,HttpServletRequest request) throws IOException{
        InputStream inputStream = file.getInputStream();
        return inputStream;
    }

这样 就可以解决之前的问题了。

然后今天突然在网上看到,利用js可以直接获取文件的绝对路径,看了好多大佬的写的,但是并没有用,想想也是,浏览器为了安全都给你禁止了,你还要用,这不是不合逻辑么?如果是可以用的话,浏览器应该是可以给出解释或者接口之类的吧,然而并没有,那就是不让用了。以后找到在更新吧。

不断学习,不断进步。

希望大佬们给出建议哈,不喜轻喷

时间: 2024-10-17 07:57:55

关于读取上传文件问题的两个解决办法的相关文章

GitHub上传文件不能超过100M的解决办法

上传项目到GitHub上,当某个文件大小超过100M时,就会上传失败,因为默认的限制了上传文件大小不能超过100M.如果需要上传超过100M的文件,就需要我们自己去修改配置. 首先,打开终端,进入项目所在的文件夹: 输入命令:git config http.postBuffer 524288000 之前git中的配置是没有这一项的,执行完以上语句后输入:git config -l 可以看到配置项的最下面多出了一行我们刚刚配置的内容. (52428000=500×1024×1024,即500M)

不经保存,直接读取上传文件的内容

<%@ Page Language="C#" AutoEventWireup="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server&qu

struts使用html:file上传文件的时候文件名乱码解决

<body> <html:form action="/jwid/struts1x/15.3/form/upload.do?action=upload" enctype="multipart/form-data"> 文件:<html:file property="file" style="width:200px;"></html:file><br> 备注:<htm

httpclient 4.3 psot方法上传文件与参数 中文乱码解决

废话不多说,直接上有码的! 1 package httpclient; 2 3 import java.io.File; 4 import java.nio.charset.Charset; 5 6 import org.apache.http.Consts; 7 import org.apache.http.Header; 8 import org.apache.http.HttpEntity; 9 import org.apache.http.client.methods.Closeable

php上传文件中文文件名乱码的解决方法

想必很多朋友在进行utf8编码的php开发上传功能的时候,都会遇到这样的一个问题,就是上传中文文件名的文件时,文件名会变成乱码,其实我们可以用iconv函数对文件名进行重新编码就解决问题了 可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱码的原因与解决办法吧. 这几天在windows下安装了XAMPP,准备初步学习一下php的相关内容.这几天接触到了php上传文件,但是出现了一个郁闷问

WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法

由于种种原因(工作忙,要锻炼健身,要看书,要学习其他兴趣爱好,谈恋爱等),博客已经好久没有更新,为这个内心一直感觉很愧疚,今天开始决定继续更新博客,每周至少一篇,最多不限篇幅. 今天说一下,下午在工作中遇到的一个问题:公司的后端同事用bootstrap的模态框,结合WebUploadder做后台上传文件的功能的时候,发现上传按钮点击无效.同事过来请求我支援,我研究了下,发现了三种解决方案,下面具体说说是这三种方法是怎么解决的. 我们先来分析一下解决这个问题的思路: 为什么上传控件放到模态框里面就

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法(2)

书接上文. 上文中描述了如何在 SpringCloud+Feign环境下上传文件与form-data同时存在的解决办法,实践证明基本可行,但却会引入其他问题. 主要导致的后果是: 1. 无法与普通Feign方法并存 2. 几率性(不确定条件下)导致其他form-data类型参数无法识别,无法正常工作,错误信息大致如下: org.springframework.web.multipart.support.MissingServletRequestPartException: Required re

IOS10.3上传照片只能拍照不能选择解决办法

升级IOS10.3正式版以后可能会出现上传文件的控件只能拍照而不能选择现有图片的问题. 正好被我们碰到了,于是找了找解决思路,发现如下解决思路: 原代码为: <input type="file" capture accept="image/*"/> 大家可能注意到capture属性了,加这个capture属性当时好像为了解决安卓兼容问题,但ios10.3却认为加了这个属性只允许拍照.因此, 解决办法为:去掉capture属性 修改后的代码如下: <

SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法

最近项目转型使用SpringCloud框架下的微服务架构,各微服务之间使用Feign进行调用.期间,发现若被调用方法涉及到文件上传且仅存在单个文件时,一切正常,代码片段如下: 1 @RequestMapping(value = "/if/****/add", method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 2 JSONObject add(@RequestPart(value = &