asp利用FSO取得BMP,JPG,PNG,GIF文件信息
封面图
•
2025-09-24
•
asp
179
0
0
0
在 ASP(Active Server Pages)中,你可以使用 `FileSystemObject`(FSO)来读取文件信息,比如文件大小、创建时间、修改时间等。但需要注意的是,**FSO 本身无法直接获取 BMP、JPG、PNG、GIF 等图像文件的元数据(如分辨率、颜色深度等)**。 如果你只是想获取文件的基本信息(如文件名、大小、创建时间、修改时间等),可以使用 FSO 来实现;如果需要获取图像的详细信息(如宽度、高度、格式等),则需要使用其他方法,例如: - 使用 `ADODB.Stream` 加载图像并解析其二进制数据; - 或者使用第三方组件(如 ImageMagick 的 COM 接口)。 --- ## ✅ 一、使用 FSO 获取文件基本信息 ```asp <% Dim fso, file, folderPath, fileName folderPath = Server.MapPath("/images/") ' 替换为你的图片目录 fileName = "example.jpg" ' 替换为你要查询的文件名 Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.GetFile(folderPath & "\" & fileName) Response.Write "文件名: " & file.Name & "<br>" Response.Write "路径: " & file.Path & "<br>" Response.Write "大小: " & file.Size & " 字节<br>" Response.Write "创建时间: " & file.DateCreated & "<br>" Response.Write "最后修改时间: " & file.DateLastModified & "<br>" Response.Write "最后访问时间: " & file.DateLastAccessed & "<br>" Set file = Nothing Set fso = Nothing %> ``` --- ## ✅ 二、使用 ADODB.Stream 获取图像基本信息(如宽度、高度) 下面是一个示例代码,用于从图像文件中提取宽度和高度(适用于 JPG、PNG、BMP、GIF): ```asp <% Function GetImageSize(filePath) Dim stream, fileSys, file Set stream = CreateObject("ADODB.Stream") Set fileSys = CreateObject("Scripting.FileSystemObject") If Not fileSys.FileExists(filePath) Then GetImageSize = "文件不存在" Exit Function End If Set file = fileSys.GetFile(filePath) stream.Type = 1 ' adTypeBinary stream.Open stream.LoadFromFile filePath stream.Position = 0 Dim buffer, width, height, format buffer = stream.Read(256) ' 读取前256字节 ' 判断图像类型 If Left(Hex(AscB(MidB(buffer, 1, 1))), 2) = "FF" And Left(Hex(AscB(MidB(buffer, 2, 1))), 2) = "D8" Then ' JPEG width = ReadJPEGWidth(buffer) height = ReadJPEGHeight(buffer) format = "JPEG" ElseIf Left(Hex(AscB(MidB(buffer, 1, 1))), 2) = "47" And Left(Hex(AscB(MidB(buffer, 2, 1))), 2) = "49" Then ' GIF width = ReadGIFWidth(buffer) height = ReadGIFHeight(buffer) format = "GIF" ElseIf Left(Hex(AscB(MidB(buffer, 1, 1))), 2) = "89" And Left(Hex(AscB(MidB(buffer, 2, 1))), 2) = "50" Then ' PNG width = ReadPNGWidth(buffer) height = ReadPNGHeight(buffer) format = "PNG" Else GetImageSize = "未知格式" Exit Function End If GetImageSize = "格式: " & format & ", 宽度: " & width & ", 高度: " & height End Function ' 读取 JPEG 宽高 Function ReadJPEGWidth(buffer) Dim pos pos = InStrB(1, buffer, ChrB(172)) If pos > 0 Then ReadJPEGWidth = AscB(MidB(buffer, pos + 2, 1)) * 256 + AscB(MidB(buffer, pos + 3, 1)) Else ReadJPEGWidth = "未知" End If End Function Function ReadJPEGHeight(buffer) Dim pos pos = InStrB(1, buffer, ChrB(172)) If pos > 0 Then ReadJPEGHeight = AscB(MidB(buffer, pos + 4, 1)) * 256 + AscB(MidB(buffer, pos + 5, 1)) Else ReadJPEGHeight = "未知" End If End Function ' 读取 GIF 宽高 Function ReadGIFWidth(buffer) ReadGIFWidth = AscB(MidB(buffer, 7, 1)) * 256 + AscB(MidB(buffer, 6, 1)) End Function Function ReadGIFHeight(buffer) ReadGIFHeight = AscB(MidB(buffer, 9, 1)) * 256 + AscB(MidB(buffer, 8, 1)) End Function ' 读取 PNG 宽高 Function ReadPNGWidth(buffer) ReadPNGWidth = AscB(MidB(buffer, 17, 1)) * 256 + AscB(MidB(buffer, 16, 1)) End Function Function ReadPNGHeight(buffer) ReadPNGHeight = AscB(MidB(buffer, 19, 1)) * 256 + AscB(MidB(buffer, 18, 1)) End Function ' 示例调用 Dim imagePath imagePath = Server.MapPath("/images/example.jpg") Response.Write GetImageSize(imagePath) %> ``` --- ## 📌 注意事项 - 上述代码是基于图像文件的二进制结构进行解析,可能不适用于所有格式或特殊编码。 - 对于更复杂的图像处理,建议使用 **ImageMagick** 或 **GDI+**(通过 COM 组件)。 - 在 IIS 中运行时,请确保启用 `ADODB.Stream` 和 `Scripting.FileSystemObject` 的权限。 --- ## ✅ 总结 | 功能 | 方法 | |------|------| | 文件名、大小、时间 | `FileSystemObject` | | 图像宽高、格式 | `ADODB.Stream` + 二进制解析 | 如需更强大的图像处理功能,推荐使用第三方库或升级到 ASP.NET。
上一篇:
ASP中自动生成多级文件夹的函数
下一篇:
给你的FileSystemObject对象加把锁
标题录入,一次不能超过6条
返回顶部
留言
留言
评论