你是上传文件,不需要知道绝对路径的。再者,一般情况下,由于安全问题,浏览器是不会给你绝对路径。
如果你在action中定义的file不能接收的话,请检查你的form是不是没有设置enctype="multipart/form-data"(传输文件需要这样设置)
设置了,会不胡适struts1不支持定义的file呢?浏览器是不会给绝对路径,楼上说的设置值隐藏域是否可行呢?谢谢!
@拥抱天空的风: 绝对路径都不会出现在页面上,隐藏域也是没有用的。因为你拿不到绝对路径。而且就算你拿到了绝对路径,你在服务器也不可能通过这个绝对路径拿到客户端的文件。
如果是用ActiveX(IE),Chrome/火狐插件之类的,倒是可以从底层拿到绝对路径。
对struts1不熟,无法确定它支不支持定义的file。
@幻天芒: 谢谢
那你在<form>中另外添加一个隐藏字段,存放文件名,传递给后台
有说这是浏览器的安全机制,绝对路径不能直接拿到,,,我在action里定义了File,但是还是不能接收啊
@拥抱天空的风:
如果你是想要获取文件在用户的磁盘上的路径,就用我上面说的。
如果你是想要在action中获取文件,你可以使用文件上传的相关类库。例如:common-upload等等
另外添加一个隐藏字段,存放文件名,具体怎么写?如果文件名只能是选中文件时才能确定的呢?
<input type="hidden" ...
@拥抱天空的风:
<input type='hidden' name='filepath' id='filepath'>这个是你存储文件路径的
<input type='file' name='file' id='file' onchange="document.getElementById('filepath').value=this.value;">这个是你选择文件的
@螺 丝 钉: 我昨天试过通过js把值赋给隐藏域,貌似给的是一个错误的路径,好像不允许啊!
@螺 丝 钉:
var obj1 = document.getElementById('file'); var obj2 = document.getElementById('path'); obj2.value = obj1.value; jQuery: $("#path").val($("#file").val());
这样设置的
@螺 丝 钉:
就刚才给你发的就可以,刚才我测试了一下。
这个是页面的HTML文件截图
@拥抱天空的风:
刚才是在360测试,再发一个在IE上测试的:
@螺 丝 钉: 高级浏览器是不会暴漏真实的路径的。
@螺 丝 钉: 请问你的ie版本是多少呢?我在谷歌和ie11上测得的路径都是C:\fakepath\xlsx_test.xlsx
这不是一个正确的路径,原路径被修改了
@拥抱天空的风:
360浏览器现在用的是google的chrome浏览器内核,他算不算高级的呢?
@螺 丝 钉:
IE 8
将你的服务器地址添加到可信任站点,IE设置里面找到可信任站点的高级设置,有一条是可以阻止隐藏路径,并且显示绝对路径的。
要求不改变客户端设置