在ASP(Classic ASP)中实现图片上传功能,通常需要以下步骤,这里提供一个
无组件上传
的解决方案(无需第三方DLL),核心是解析
multipart/form-data
格式的请求数据:
核心代码示例 (
upload.asp
)
<%Option ExplicitResponse.Expires = -1' 设置上传目录(物理路径)Dim uploadPathuploadPath = Server.MapPath("/uploads/") ' 确保IIS用户有写入权限' 处理上传If Request.TotalBytes > 0 ThenDim binData, boundary, boundaryPos, startPos, endPos, fileName, fileExtDim fileContent, filePath, fileSize, savedFileName' 读取二进制数据binData = Request.BinaryRead(Request.TotalBytes)' 获取边界字符串(从Content-Type中解析)boundary = MidB(Request.ServerVariables("HTTP_Content_Type"), InStrB(Request.ServerVariables("HTTP_Content_Type"), "boundary=") + 9)boundary = "--" & LeftB(boundary, LenB(boundary) - 2) ' 去除结尾回车' 查找文件数据的起始位置boundaryPos = InStrB(binData, boundary)startPos = boundaryPos + LenB(boundary) + 2 ' +2跳过换行' 定位文件名fileNamePos = InStrB(startPos, binData, ToBytes("filename="""))If fileNamePos > 0 ThenfileNamePos = fileNamePos + 10 ' 跳过 filename="endPos = InStrB(fileNamePos, binData, ToBytes(""""))fileName = FROMBytes(MidB(binData, fileNamePos, endPos - fileNamePos))' 只保留文件名(去除客户端路径)fileName = Mid(fileName, InStrRev(fileName, "") + 1)' 获取文件扩展名fileExt = LCase(Mid(fileName, InStrRev(fileName, ".") + 1))' 检查允许的扩展名If InStr("|JPG|jpeg|png|gif|", "|" & fileExt & "|") > 0 Then' 定位文件内容开始位置(跳过头部信息)startPos = InStrB(endPos, binData, ToBytes(vbCrLf & vbCrLf)) + 4' 查找文件结束边界endPos = InStrB(startPos, binData, ToBytes(boundary))fileSize = endPos - startPos - 2 ' -2去除末尾换行' 提取文件二进制数据fileContent = MidB(binData, startPos, fileSize)' 生成唯一文件名savedFileName = "img_" & Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now) & "." & fileExtfilePath = uploadPath & "" & savedFileName' 保存文件Dim streamSet stream = Server.CreateObject("ADODB.Stream")stream.Type = 1 ' adTypeBinarystream.Openstream.Write fileContentstream.SaveToFile filePath, 2 ' 2=覆盖stream.CloseSet stream = Nothing' 显示结果Response.Write "上传成功!
"Response.Write "文件名: " & savedFileName & "
"Response.Write ""ElseResponse.Write "错误:只允许上传JPG, PNG, GIF图片!"End IfEnd IfEnd If' 辅助函数:字符串转二进制Function ToBytes(s)Dim streamSet stream = Server.CreateObject("ADODB.Stream")stream.Type = 2 ' adTypeTextstream.Charset = "utf-8"stream.Openstream.WriteText sstream.Position = 0stream.Type = 1 ' adTypeBinaryToBytes = stream.Readstream.CloseSet stream = NothingEnd Function' 辅助函数:二进制转字符串Function FromBytes(bin)Dim streamSet stream = Server.CreateObject("ADODB.Stream")stream.Type = 1 ' adTypeBinarystream.Openstream.Write binstream.Position = 0stream.Type = 2 ' adTypeTextstream.Charset = "utf-8"FromBytes = stream.ReadTextstream.CloseSet stream = NothingEnd Function%>
关键步骤说明:
常见问题解决:
增强建议:
0.1吨是多少斤?
100千克=200斤
如何用asp同时上传多张图片到数据库?
网页上传图片多数不是把图片保存在数据库,是将图片文件放在一个建好的目录,上传的时候,字段里只保存图片的路径。上传多张图片,用FOR循环
asp.net图片上传代码 用在网站里面
图片上传的代码其实比较简单,思路也易掌握。
我给出一个完整的实例,你复制过去就可以直接使用。














发表评论