file是一种特殊的input,不能被赋值,也不能被javascript取值,只能随表单提交,而且随表单提交的也是file路径所指向的文件本身。
这是浏览器安全原因所限制的,如果可以取值和赋值的话,那么javascript就可以随意获取你电脑上的文件了,这是非常危险的
像这样的文章很多,随便找了一个你看看
获取文件目录路径的JavaScript代码
很多时候我们都需要在js文件中获取该文件的详细路径,以便根据其他文件与该js的相对位置计算并设置其他一些文件如或样式或脚本的目录路径。我们一般都这样做:
假设外部js文件的文件名为:testjs,则在testjs中都这样写:
var js=documentscripts;
var jsPath;
for(var i=0;i<jslength;i++){
if(js[i]srcindexOf("testjs")>-1){
jsPath=js[i]srcsubstring(0,js[i]srclastIndexOf("/")+1);
}
}
alert(jsPath);
或者为了提高效率,这样写
var js=documentscripts;
var jsPath;
for(var i=jslength;i>0;i--){
if(js[i-1]srcindexOf("testjs")>-1){
jsPath=js[i-1]srcsubstring(0,js[i-1]srclastIndexOf("/")+1);
}
}
alert(jsPath);
这种思路很清晰,根据文件名获取引用的文件的src属性并进行判断截取即可。
但这种办法有以下两个缺点:
1、需要遍历页面的js文件,有时可能效率会比较低。
2、如果页面中出现目录不同的重名的js文件则可能判断错误。
其实我们可以有更简单的办法来准确获取路径,这是在一次js测试突然发现并幡然醒悟的。
var js=documentscripts;
js=js[jslength-1]srcsubstring(0,js[jslength-1]srclastIndexOf("/")+1);
alert(js);
直接使用jslength?这会正确吗?
其实仔细想想,由于判断路径的js代码一般都直接放在js文件中而不是函数中,所以当加载该js文件时会立即执行其中的语句,而执行此语句时所获取到的js文件数目正好是jslength-1,因为页面后面的js文件还没有加载,所以该处的js文件获取的数目并不是页面所有的js文件的数目。这样一来,获取路径就无需再遍历了,而且文件判断也无需文件名,判断更加准确(jslength-1永远都是其文件本身)。
获取windows系统临时目录
<script>
var fso = new ActiveXObject("ScriptingFileSystemObject");
var f = fsoGetSpecialFolder(2);
alert(f);
</script>
'添加一个Microsoft Common Dialog Control 60部件
'添加一个CommandButton控件
'添加一个ListBox控件
'添加一个Label控件
'------------------------------------------------
'读写INI文件
Private Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function SaveINI Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As String, ByVal lplFileName As String) As Long
'读写INI文件
Function GetINI(AppName As String, KeyName As String, filename As String) As String
Dim RetStr As String
RetStr = String(10000, Chr(0))
GetINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), filename))
'读:Rtn = GetINI(AppName, KeyName, filename)
'写:SaveINI appname,keyname,string,filename
End Function
Private Sub Command1_Click()
CommonDialog1Filter = "所有文件()|"
CommonDialog1FilterIndex = 1
CommonDialog1ShowOpen
List1AddItem CommonDialog1filename
End Sub
Private Sub Form_Load()
For i = 0 To Val(GetINI("listcount", "Count", AppPath & "\stini")) - 1
List1AddItem GetINI("list", CStr(Format(i, "000")), AppPath & "\stini"), i
Next i
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
For i = 1 To List1ListCount
SaveINI "list", CStr(Format(i - 1, "000")), List1List(i - 1), AppPath & "\stini"
Next i
SaveINI "ListCount", "Count", List1ListCount, AppPath & "\stini"
End Sub
Private Sub List1_Click()
Label1Caption = List1Text
End Sub
File类有两个常用方法可以得到文件路径一个是:getCanonicalPath(),另一个是:getAbsolutePath(),可以通过File类的实例调用这两个方法例如filegetAbsolutePath()其中file是File的实例对象。下面是一个具体例子:
public class PathTest
{
public static void main(String[] args)
{
File file = new File("\\src\\baidu");
Systemoutprintln(filegetAbsolutePath());
try
{
Systemoutprintln(filegetCanonicalPath());
} catch (IOException e)
{
eprintStackTrace();
}
}
}
getAbsolutePath()和getCanonicalPath()的不同之处在于,getCanonicalPath()得到的是一个规范的路径,而getAbsolutePath()是用构造File对象的路径+当前工作目录。例如在上面的例子中(点号)代表当前目录。getCanonicalPath()就会把它解析为当前目录但是getAbsolutePath()会把它解析成为目录名字(目录名字是点号)。
下面是上面程序在我电脑上的输出:
G:\xhuoj\konw\\src\baidu
G:\xhuoj\konw\src\baidu
FileUpload的时候, Postback的时候文件已经传到后台了, 用FileUploadFileBytes就能取得文件内容了。
和浏览器相关。如果要突破这个限制,需要编写和部署activex控件
以上就是关于怎么用js获取上传文件的完整路径全部的内容,包括:怎么用js获取上传文件的完整路径、javascript 中怎样获取file里的完整路径,如:D:\E\1.jpg、VB获取文件完整绝对路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)