ASP File
File 对象的属性、复制移动删除、打开为 TextStream。
属性
| Property | Meaning |
|---|---|
Name | 含扩展名,不含路径 |
ShortName | 8.3 格式 |
Path | 物理路径 |
Size | 字节 |
Type | 「文本文档」这类描述 |
DateCreated | |
DateLastModified | |
DateLastAccessed | |
Attributes | 0 普通 / 1 只读 / 2 隐藏 / 4 系统 / 32 存档 |
ParentFolder | 返回 Folder 对象 |
Drive | 返回 Drive 对象 |
读取属性
<%
Dim fso, f
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(Server.MapPath("/data/report.pdf"))
Response.Write "名称:" & f.Name & "<br>"
Response.Write "路径:" & f.Path & "<br>"
Response.Write "大小:" & FormatNumber(f.Size / 1024, 1) & " KB<br>"
Response.Write "类型:" & f.Type & "<br>"
Response.Write "属性:" & f.Attributes & "<br>"
Response.Write "只读:" & ((f.Attributes And 1) = 1) & "<br>"
Response.Write "修改:" & f.DateLastModified
Set f = Nothing
Set fso = Nothing
%>名称:report.pdf
路径:C:\inetpub\wwwroot\data\report.pdf
大小:180.0 KB
类型:PDF 文档
属性:32
只读:False
修改:2026/11/2 17:40:55Attributes is a bit flag; test with And: (f.Attributes And 1) = 1 means read-only. To set it assign f.Attributes = f.Attributes Or 1 and revert afterwards.
复制、移动、删除
<%
' 复制(第三个参数 True = 覆盖已存在的目标)
f.Copy Server.MapPath("/backup/report.pdf"), True
' 移动(等于改名 + 换目录)
f.Move Server.MapPath("/archive/report.pdf")
' 删除(True = 只读文件也删)
f.Delete True
%>Copy's second argument is Overwrite (default False, so an existing target errors). Delete's is Force (default False, so read-only files resist). Both defaults are easy to forget.
打开成文本流
<%
Dim ts
Set ts = f.OpenAsTextStream(1) ' 1 = 只读
Response.Write ts.ReadAll
ts.Close
Set ts = Nothing
%>OpenAsTextStream is fso.OpenTextFile(f.Path, mode) without repeating the path. Same caveat for large files: do not ReadAll.
上传文件的处理
<%
' 经典 ASP 没有内置上传,常用第三方组件(如 Persits.Upload)
' 或用 ADODB.Stream 手工解析 multipart 请求体
Dim upload, file
Set upload = Server.CreateObject("Persits.Upload")
upload.Save Server.MapPath("/uploads")
For Each file In upload.Files
Response.Write file.FileName & " — " & file.Size & " 字节<br>"
Next
%>.asp file and requesting it gains code execution — the most common way classic ASP sites are compromised.安全提醒
- 文件名不可信 ——
../../x.asp能写到任意位置 - 扩展名白名单 —— 只允许
.jpg、.pdf这类,且校验真实内容 - 重命名保存 —— 用 GUID 或时间戳做文件名,不用原名
属性
| 属性 | 含义 |
|---|---|
| 文件名 | 含扩展名,不含路径 |
| 短文件名 | 8.3 格式 |
| 完整路径 | 物理路径 |
| 大小 | 字节 |
| 类型 | 「文本文档」这类描述 |
| 创建时间 | |
| 修改时间 | |
| 访问时间 | |
| 属性位 | 0 普通 / 1 只读 / 2 隐藏 / 4 系统 / 32 存档 |
| 父目录 | 返回 Folder 对象 |
| 所在驱动器 | 返回 Drive 对象 |
读取属性
<%
Dim fso, f
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(Server.MapPath("/data/report.pdf"))
Response.Write "名称:" & f.Name & "<br>"
Response.Write "路径:" & f.Path & "<br>"
Response.Write "大小:" & FormatNumber(f.Size / 1024, 1) & " KB<br>"
Response.Write "类型:" & f.Type & "<br>"
Response.Write "属性:" & f.Attributes & "<br>"
Response.Write "只读:" & ((f.Attributes And 1) = 1) & "<br>"
Response.Write "修改:" & f.DateLastModified
Set f = Nothing
Set fso = Nothing
%>名称:report.pdf
路径:C:\inetpub\wwwroot\data\report.pdf
大小:180.0 KB
类型:PDF 文档
属性:32
只读:False
修改:2026/11/2 17:40:55Attributes 是位标志,用 And 判断某一位:(f.Attributes And 1) = 1 表示只读。想设置属性就赋值 f.Attributes = f.Attributes Or 1,用完记得改回去。
复制、移动、删除
<%
' 复制(第三个参数 True = 覆盖已存在的目标)
f.Copy Server.MapPath("/backup/report.pdf"), True
' 移动(等于改名 + 换目录)
f.Move Server.MapPath("/archive/report.pdf")
' 删除(True = 只读文件也删)
f.Delete True
%>Copy 的第二个参数是 Overwrite,默认 False,目标存在就报错。Delete 的参数是 Force,默认 False,只读文件删不掉。这两个默认值都容易忘。
打开成文本流
<%
Dim ts
Set ts = f.OpenAsTextStream(1) ' 1 = 只读
Response.Write ts.ReadAll
ts.Close
Set ts = Nothing
%>OpenAsTextStream 等价于 fso.OpenTextFile(f.Path, mode),好处是不用再传一次路径。大文件还是那句话:别 ReadAll。
上传文件的处理
<%
' 经典 ASP 没有内置上传,常用第三方组件(如 Persits.Upload)
' 或用 ADODB.Stream 手工解析 multipart 请求体
Dim upload, file
Set upload = Server.CreateObject("Persits.Upload")
upload.Save Server.MapPath("/uploads")
For Each file In upload.Files
Response.Write file.FileName & " — " & file.Size & " 字节<br>"
Next
%>.asp 文件再访问它,就拿到了服务器执行权限——这是经典 ASP 站点最常见的入侵方式。安全提醒
- 文件名不可信 ——
../../x.asp能写到任意位置 - 扩展名白名单 —— 只允许
.jpg、.pdf这类,且校验真实内容 - 重命名保存 —— 用 GUID 或时间戳做文件名,不用原名