首页 新闻 搜索 专区 学院

jsp页面传过去的file只有文件名 而没有文件路径

0
悬赏园豆:40 [已解决问题] 解决于 2014-08-07 20:49

在解析文件时  需要用到文件路径  但是从jsp页面传过去的file只有文件名 而没有文件路径 这个该怎么解决?我的是解析excel。框架用的是struts1

拥抱天空的风的主页 拥抱天空的风 | 初学一级 | 园豆:117
提问于:2014-08-06 09:11
< >
分享
最佳答案
0

你是上传文件,不需要知道绝对路径的。再者,一般情况下,由于安全问题,浏览器是不会给你绝对路径。

如果你在action中定义的file不能接收的话,请检查你的form是不是没有设置enctype="multipart/form-data"(传输文件需要这样设置)

收获园豆:20
幻天芒 | 高人七级 |园豆:36594 | 2014-08-06 09:56

设置了,会不胡适struts1不支持定义的file呢?浏览器是不会给绝对路径,楼上说的设置值隐藏域是否可行呢?谢谢!

拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 10:06

@拥抱天空的风: 绝对路径都不会出现在页面上,隐藏域也是没有用的。因为你拿不到绝对路径。而且就算你拿到了绝对路径,你在服务器也不可能通过这个绝对路径拿到客户端的文件。

如果是用ActiveX(IE),Chrome/火狐插件之类的,倒是可以从底层拿到绝对路径。

对struts1不熟,无法确定它支不支持定义的file。

幻天芒 | 园豆:36594 (高人七级) | 2014-08-06 10:13

@幻天芒: 谢谢

拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 11:10
其他回答(2)
0

那你在<form>中另外添加一个隐藏字段,存放文件名,传递给后台

收获园豆:10
乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 09:29

有说这是浏览器的安全机制,绝对路径不能直接拿到,,,我在action里定义了File,但是还是不能接收啊

支持(0) 反对(0) 拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 09:41

@拥抱天空的风: 

如果你是想要获取文件在用户的磁盘上的路径,就用我上面说的。

如果你是想要在action中获取文件,你可以使用文件上传的相关类库。例如:common-upload等等

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 09:44

另外添加一个隐藏字段,存放文件名,具体怎么写?如果文件名只能是选中文件时才能确定的呢?

<input type="hidden" ...
支持(0) 反对(0) 拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 09:50

@拥抱天空的风: 

<input type='hidden' name='filepath' id='filepath'>这个是你存储文件路径的

<input type='file' name='file' id='file' onchange="document.getElementById('filepath').value=this.value;">这个是你选择文件的

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 10:04

@螺 丝 钉: 我昨天试过通过js把值赋给隐藏域,貌似给的是一个错误的路径,好像不允许啊!

支持(0) 反对(0) 拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 10:07

@螺 丝 钉: 

var obj1 = document.getElementById('file');
        var obj2 = document.getElementById('path');
        obj2.value = obj1.value;
        jQuery: $("#path").val($("#file").val());

这样设置的

支持(0) 反对(0) 拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 10:11

@螺 丝 钉: 

就刚才给你发的就可以,刚才我测试了一下。

这个是页面的HTML文件截图

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 10:18

@拥抱天空的风: 

刚才是在360测试,再发一个在IE上测试的:

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 10:30

@螺 丝 钉: 高级浏览器是不会暴漏真实的路径的。

支持(0) 反对(0) 幻天芒 | 园豆:36594 (高人七级) | 2014-08-06 11:23

@螺 丝 钉: 请问你的ie版本是多少呢?我在谷歌和ie11上测得的路径都是C:\fakepath\xlsx_test.xlsx

这不是一个正确的路径,原路径被修改了

支持(1) 反对(0) 拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-06 11:24

@拥抱天空的风:

360浏览器现在用的是google的chrome浏览器内核,他算不算高级的呢?

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 12:06

@螺 丝 钉:

IE 8 

支持(0) 反对(0) 乐享程序员 | 园豆:930 (小虾三级) | 2014-08-06 12:06
0

将你的服务器地址添加到可信任站点,IE设置里面找到可信任站点的高级设置,有一条是可以阻止隐藏路径,并且显示绝对路径的。

收获园豆:10
Echo.Liu | 园豆:385 (菜鸟二级) | 2014-08-07 11:06

要求不改变客户端设置  

支持(0) 反对(0) 拥抱天空的风 | 园豆:117 (初学一级) | 2014-08-07 20:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册