注册 登录
编程论坛 ASP技术论坛

图片上传实例

阳光白雪 发布于 2007-05-13 12:31, 16375 次点击
图片上传实例—Index.Asp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Admin_ProductAdd</title>
</head>

<body>
<form method="post" name="DataForm" action="Action.Asp" enctype="multipart/form-data">
<table width="100%" border="0" cellpadding="3" cellspacing="0" class="TabBody">
<tr>
<td align="right">图片:</td>
<td><input type="file" name="PicFile" size="40"></td>
</tr>
<tr>
<td align="right">图片说明:</td>
<td><textarea name="PicRemark" cols="70" rows="12"></textarea></td>
</tr>
<tr>
<td></td>
<td>
<input type="Submit" name="Submit1" class="Botton_1" value=" 提 交 ">
</td>
</tr>
</table>
</form>
</body>
</html>

63 回复
#2
阳光白雪2007-05-13 12:32
图片上传实例—Action.Asp

<!--#include file="Conn.Asp" -->
<!--#include file="UpLoadClass.Asp" -->
<%
''创建上传文件对象
Set Upload = new upload_file

''参数设置部分
Dim SavePath,RedimName
''返回上传的文件保存的路径
SavePath = Server.MapPath(".")
''指定是否随机生成新文件名:True=是,False=否
RedimName = False
''指定可以上传的文件类型
Const okFileType = "|jpg|gif|bmp|png|zip|doc|xls|mdb|rar|"

''接受表单的非文件信息数据
Dim PicRemark
PicRemark = Upload.Form("PicRemark")

''遍历表单文件域并接收文件域数据
For Each FormName In Upload.File
''获取文件域数据
Set PicFile = Upload.File(FormName)
''依据文件大小判断是否选择了文件,大小小于0时视为没有选择上传的文件
If PicFile.FileSize > 0 Then
''取得文件名
PicFileName = PicFile.FileName
''取得文件类型
PicFileType = GetExtensionName(PicFileName)
''判断文件类型是否允许上传
If Instr(LCase(okFileType),"|"& LCase(PicFileType) &"|") > 0 Then
''判断是否要随机生成新文件名称
If RedimName = True Then
Randomize
RunNum = Int(90000*Rnd)+10000
NewFileName = year(now) & month(now) & day(now) & hour(now) & minute(now) & second(now) & RunNum &"."& PicFileType
NewFilePath = SavePath &"\"& NewFileName
Else
NewFilePath = SavePath &"\"& PicFileName
End If
''保存文件到服务器
PicFile.SaveToFile NewFilePath
''保存信息到数据库
Call ConnOpen()
InsertSql = "Insert Into UpFile(FileName,FileRemark) Values('"& PicFileName &"','"& PicRemark &"')"
Conn.Execute(InsertSql)
Call ConnClose()
Else
ErrMessage = "只能上传"& okFileType &"格式的图片文件!"
Response.Write("<script language=""javascript"">alert('"& ErrMessage &"');history.back();</script>")
Response.End()
End If
Else
ErrMessage = "请选择要上传的图片文件!"
Response.Write("<script language=""javascript"">alert('"& ErrMessage &"');history.back();</script>")
Response.End()
End If
Next
Set Upload = Nothing
ErrMessage = "图片上传成功!"
Response.Write("<script language=""javascript"">alert('"& ErrMessage &"');window.location='Index.Asp';</script>")
Response.End()

'函数作用:取得文件的后缀名
Function GetExtensionName(aName)
Dim FileName
FileName=Split(aName,".")
GetExtensionName=FileName(Ubound(FileName))
End Function


%>

[此贴子已经被作者于2007-8-17 11:53:55编辑过]

#3
阳光白雪2007-05-13 12:33
图片上传实例—UpLoadClass.Asp
<%
dim oUpFileStream
Class upload_file
dim Form,File,Version
Private Sub Class_Initialize
'定义变量
dim RequestBinDate,sStart,bCrLf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,oFileInfo
dim iFileSize,sFilePath,sFileType,sFormvalue,sFileName
dim iFindStart,iFindEnd
dim iFormStart,iFormEnd,sFormName
'代码开始
Version="无组件上传类 Version 0.96"
set Form = Server.CreateObject("Scripting.Dictionary")
set File = Server.CreateObject("Scripting.Dictionary")
if Request.TotalBytes < 1 then Exit Sub
set tStream = Server.CreateObject("adodb.stream")
set oUpFileStream = Server.CreateObject("adodb.stream")
oUpFileStream.Type = 1
oUpFileStream.Mode = 3
oUpFileStream.Open
oUpFileStream.Write Request.BinaryRead(Request.TotalBytes)
oUpFileStream.Position=0
RequestBinDate = oUpFileStream.Read
iFormEnd = oUpFileStream.Size
bCrLf = chrB(13) & chrB(10)
'取得每个项目之间的分隔符
sStart = MidB(RequestBinDate,1, InStrB(1,RequestBinDate,bCrLf)-1)
iStart = LenB (sStart)
iFormStart = iStart+2
'分解项目
Do
iInfoEnd = InStrB(iFormStart,RequestBinDate,bCrLf & bCrLf)+3
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iFormStart
oUpFileStream.CopyTo tStream,iInfoEnd-iFormStart
tStream.Position = 0
tStream.Type = 2
tStream.Charset ="gb2312"
sInfo = tStream.ReadText
'取得表单项目名称
iFormStart = InStrB(iInfoEnd,RequestBinDate,sStart)-1
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
'如果是文件
if InStr (45,sInfo,"filename=""",1) > 0 then
set oFileInfo= new FileInfo
'取得文件属性
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileName = GetFileName(sFileName)
oFileInfo.FilePath = GetFilePath(sFileName)
oFileInfo.FileExt = GetFileExt(sFileName)
iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
oFileInfo.FileType = Mid (sinfo,iFindStart,iFindEnd-iFindStart)
oFileInfo.FileStart = iInfoEnd
oFileInfo.FileSize = iFormStart -iInfoEnd -2
oFileInfo.FormName = sFormName
file.add sFormName,oFileInfo
else
'如果是表单项目
tStream.Close
tStream.Type = 1
tStream.Mode = 3
tStream.Open
oUpFileStream.Position = iInfoEnd
oUpFileStream.CopyTo tStream,iFormStart-iInfoEnd-2
tStream.Position = 0
tStream.Type = 2
tStream.Charset = "gb2312"
sFormvalue = tStream.ReadText
form.Add sFormName,sFormvalue
end if
tStream.Close
iFormStart = iFormStart+iStart+2
'如果到文件尾了就退出
loop until (iFormStart+2) = iFormEnd
RequestBinDate=""
set tStream = nothing
End Sub

Private Sub Class_Terminate
'清除变量及对像
if not Request.TotalBytes<1 then
oUpFileStream.Close
set oUpFileStream =nothing
end if
Form.RemoveAll
File.RemoveAll
set Form=nothing
set File=nothing
End Sub

'取得文件路径
Private function GetFilePath(FullPath)
If FullPath <> "" Then
GetFilePath = left(FullPath,InStrRev(FullPath, "\"))
Else
GetFilePath = ""
End If
End function

'取得文件名
Private function GetFileName(FullPath)
If FullPath <> "" Then
GetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)
Else
GetFileName = ""
End If
End function

'取得扩展名
Private function GetFileExt(FullPath)
If FullPath <> "" Then
GetFileExt = mid(FullPath,InStrRev(FullPath, ".")+1)
Else
GetFileExt = ""
End If
End function

End Class

'文件属性类
Class FileInfo
dim FormName,FileName,FilePath,FileSize,FileType,FileStart,FileExt
Private Sub Class_Initialize
FileName = ""
FilePath = ""
FileSize = 0
FileStart= 0
FormName = ""
FileType = ""
FileExt = ""
End Sub

'保存文件方法
Public function SaveToFile(FullPath)
dim oFileStream,ErrorChar,i
SaveToFile=1
if trim(fullpath)="" or right(fullpath,1)="/" then exit function
set oFileStream=CreateObject("Adodb.Stream")
oFileStream.Type=1
oFileStream.Mode=3
oFileStream.Open
oUpFileStream.position=FileStart
oUpFileStream.copyto oFileStream,FileSize
oFileStream.SaveToFile FullPath,2
oFileStream.Close
set oFileStream=nothing
SaveToFile=0
end function
End Class
%>
#4
阳光白雪2007-05-13 12:34
图片上传实例—Conn.Asp
<%
'================================================================
'系统数据库类型定义
'0: SQL 2000 数据库
'1: Access 数据库
'================================================================
Auto_DataBaseKind = "1"

'================================================================
'过程作用:打开数据库连接
'================================================================
Dim Conn,Auto_DataBaseName,Auto_HostName,Auto_DataBaseUrl
Sub ConnOpen()
If Auto_DataBaseKind = "0" Then
Auto_DataBaseName = "DataBaseName" '数据库名称
Auto_HostName = "localhost" '服务器名称或IP
Auto_UserId = "sa" '登陆数据库用户ID
Auto_LogoPassWord = "" '登陆数据库密码
Auto_OaClassConnStr = "Provider = Sqloledb; User ID = " & Auto_UserId & "; Password = " & Auto_LogoPassWord & "; Initial Catalog = " & Auto_DataBaseName & "; Data Source = " & Auto_HostName & ";"
ElseIf Auto_DataBaseKind = "1" Then
Auto_DataBaseName = "Data.mdb" '数据库名称
Auto_DataForder = "" 'Access数据库存放目录,请务必以“\”结尾
Auto_DataBaseUrl = Server.MapPath(Auto_DataForder & Auto_DataBaseName)
Auto_OaClassConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Auto_DataBaseUrl
Else
Response.Write("数据库类型定义错误,请检查文件DbConn.asp中数据库类型定义是否正确!")
Response.End()
End If
On Error Resume Next
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open Auto_OaClassConnStr
If Err Then
err.Clear
Set Conn = Nothing
Response.Write ("数据库连接出错,请检查文件Conn.asp中连接字符串。")
Response.End()
End If
End Sub

'================================================================
'过程作用:关闭数据库连接
'================================================================
Sub ConnClose()
Conn.close()
Set Conn = Nothing
End Sub

%>

[此贴子已经被作者于2007-8-20 7:58:08编辑过]

#5
阳光白雪2007-05-13 12:35
图片上传实例—数据库结构
数据库名称: Data.mdb
表名 字段名 数据类型 字段说明
UpFile Id 自动编号
FileName 文本(50) 文件名
FileRemark 备注 文件说明

[此贴子已经被作者于2007-5-14 8:52:47编辑过]

#6
jclman2007-05-13 13:13

哎,还是.NET好
看看就这么两句就搞顶了:

protected void Button1_Click(object sender, EventArgs e)
{
bool FileOK = false;
string path = Server.MapPath("~/UpPic/");

//筛选文件格式
if (FileUpload1.HasFile)
{
string FileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
String[] allowExtension ={ ".gif", ".png", ".jpeg", ".jpg", ".bmp" };
for (int i = 0; i < allowExtension.Length; i++)
{
if (FileExtension == allowExtension[i])
{
FileOK = true;
}
}
}

//执行上传
if (FileOK)
{
try
{
FileUpload1.SaveAs(path + FileUpload1.FileName);
Label1.Text = "图片上传成功!";

}
catch (Exception)
{
Label1.Text = "图片上传失败!";
}
}
else
{
Label1.Text = "请选择正确的图片格式";
}
}

#7
hangxj2007-05-13 13:24
支持下下,很久没有来了,一上来就发现这么多的好东东~~ 收藏~~
#8
lq73506842007-05-13 17:34

我先顶上去,明天到公司再收藏。
在网吧不能保存啊。
先加精。
呵呵。

#9
laigaoat20052007-05-17 16:48
好东西,谢谢了。
#10
小鸟鸟2007-05-18 00:03
哈哈 收藏啊
#11
kobe4122007-05-18 08:43

谢谢分享

#12
lovexuekun2007-05-22 18:16

我用时为什么就有错误了呢!帮我解决一下呗.
技术信息(用于支持人员)

错误类型:
Microsoft JET Database Engine (0x80004005)
操作必须使用一个可更新的查询。
/ban/新建文件夹/Action.Asp, 第 44 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

网页:
POST 11323 ??? /ban/新建文件夹/Action.Asp

POST Data:
错误 '80020009'
发生意外。

/iisHelp/common/500-100.asp,行 219
什么是一个可更新的查询啊?不明白!

#13
lovexuekun2007-05-22 18:18
速度,在线等
#14
谁与争疯2007-05-22 21:09
还是PHP的爽、只用十多句,即可简单的判断与上传了。
#15
阳光白雪2007-05-23 10:48
以下是引用lovexuekun在2007-5-22 18:16:48的发言:

我用时为什么就有错误了呢!帮我解决一下呗.
技术信息(用于支持人员)

错误类型:
Microsoft JET Database Engine (0x80004005)
操作必须使用一个可更新的查询。
/ban/新建文件夹/Action.Asp, 第 44 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

网页:
POST 11323 ??? /ban/新建文件夹/Action.Asp

POST Data:
错误 '80020009'
发生意外。

/iisHelp/common/500-100.asp,行 219
什么是一个可更新的查询啊?不明白!

可能是你的数据库设置只读了!

#16
huang882007-05-23 10:56
怎么都是上传到一个文件夹下..然后把路径保存到数据库的啊..有没有直接上传..把图片的信息写到数据库里不要放在文件夹下的啊..如果有的话请教教..急
#17
jxdz0864652007-05-24 12:26
前几天就为了一个图片上传程序弄了半天。气得半死。。。。。
#18
kingsword0012007-05-26 08:06
真是辛苦版主了!我的头都看大了,请勿见怪!
#19
chenbaichao2007-05-31 11:12

谢谢楼主,辛苦了

#20
rtc2007-06-06 16:43

超帮的帖子.!
先顶!!!!!!!!!

#21
rtc2007-06-06 16:47
LG请问第2段是存到数据库
你这些可以直接套用吗!!
#22
namilili2007-07-20 15:19
回复:(阳光白雪)图片上传实例
很好用啊,能不能再提供一个文件删除的呢
#23
jtj1234562007-07-20 16:17
好东西
#24
willam2007-07-20 18:06
PHP真的是几句就够了,,为什么ASP那么烦的啊,
#25
zhulei19782007-07-20 18:29
以下是引用huang88在2007-5-23 10:56:46的发言:
怎么都是上传到一个文件夹下..然后把路径保存到数据库的啊..有没有直接上传..把图片的信息写到数据库里不要放在文件夹下的啊..如果有的话请教教..急

使用LyfUpload
下载地址:http://www.szstock.com.cn/down/view.asp?id=3

#26
longye2007-07-23 11:54
正好用到,谢谢
#27
SkyGull2007-07-23 12:52
好东西啊.
#28
lyuyyw2007-08-15 10:30

精品 收藏了 应该加精啊 !!!

#29
bestmayli2007-08-16 14:56
怎么把它改成不但可以上传图片类型文件,还可以上传office等类型文件,除了改Action.Asp中: If LCase(PicFileType) ="jpg" Or LCase(PicFileType) ="gif" Or LCase(PicFileType) ="bmp" Or LCase(PicFileType) ="png"

,还需要改哪些呢? 不好意思哟,是菜鸟
#30
bestmayli2007-08-17 08:27
大家怎么不理我呢?这个程序只可以上传图片吗?把它改成上传office文件不可以吗?大家帮帮我呢 ,还有版主高手,急用,
#31
阳光白雪2007-08-17 08:33
以下是引用bestmayli在2007-8-16 14:56:41的发言:
怎么把它改成不但可以上传图片类型文件,还可以上传office等类型文件,除了改Action.Asp中: If LCase(PicFileType) ="jpg" Or LCase(PicFileType) ="gif" Or LCase(PicFileType) ="bmp" Or LCase(PicFileType) ="png"

,还需要改哪些呢? 不好意思哟,是菜鸟

只需要改那就可以了,例如 doc 、xls ,注意要小写

#32
bestmayli2007-08-17 09:45
1 可是我改了那些,是小写,不行呢,还是只能传图片文件。
2 上传的图片文件可以抓到图片的原名字,可是名字不能链接至文件,是不是图片文件的路径没有保存到数据库里呢?如何保存其路径至数据库中呢?

版主再帮帮忙, 谢谢!
#33
bestmayli2007-08-17 10:04

版主是不是view.asp没有贴出来?我是这样view.asp,我是这样写的:
<!--#include file=Conn.asp-->

......
<% do while not rs.eof%>
<td align="center"><这里该怎么写呢?才能是使文件名链接至文件?><%=FileName=%></td>
......

#34
阳光白雪2007-08-17 12:01
可是我改了那些,是小写,不行呢,还是只能传图片文件。
我已经修改了程序,会让修改允许的文件类型更方便,具体见第一页中[Action.Asp]的代码


上传的图片文件可以抓到图片的原名字,可是名字不能链接至文件,是不是图片文件的路径没有保存到数据库里呢?
这个问题:首先如果保存失败会提示出错的,次之就酸没有出错,你看下数据库就很明白了,如果没有保存的话,请先检查你的 数据库连接及数据表是否一致,这里只是个例子,具体用的时候还得根据你的需要进行修改


<td align="center"><这里该怎么写呢?才能是使文件名链接至文件?><%=FileName=%></td>
<td align="center"><a href="文件路径/<%=FileName=%>"><%=FileName=%></a></td>
#35
qhscqb2007-08-17 12:54
好东东,收藏!
#36
zhongx2007-08-17 14:54
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
#37
bestmayli2007-08-17 16:29
版主大侠,好厉害哟,好侠义哟!!!回答很详细也仔细!
#38
zhy5892007-08-17 16:56
支持下下,一上来就发现这么多的好东东~~ 收藏~~
#39
jacklabyo2007-08-17 20:23

不行啊,我的电脑上,运行后,点提交,进到Action.asp一步页面全部空白,刷新一下也是一样,只是有时会跳出UpLoadClass.asp中有无效字符串。真是很晕啊。

#40
jacklabyo2007-08-17 20:29

我使用时的问题,

技术信息(用于支持人员)

错误类型:
Server 对象, ASP 0177 (0x800401F3)
无效的类别字符串
/X/UpLoadClass.Asp, 第 13 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

网页:
POST 109873 ??? /X/Action.Asp

POST Data:
. . .

#41
yesjia2007-08-19 03:28
我跟他一样--

不行啊,我的电脑上,运行后,点提交,进到Action.asp一步页面全部空白,刷新一下也是一样,不过文件已经上传了,数据库没有被操作。
#42
yesjia2007-08-19 16:31
解决了,是Conn.asp文件末尾少了一个符号%&gt;
#43
yesjia2007-08-27 22:14
要如何删除和编辑数据库记录时同时删除
已上传的文件呢?
#44
slfyeye2007-08-28 09:22

从数据库中读取路径,用FSO删除。

#45
redice2007-10-27 19:50
回复:(阳光白雪)图片上传实例
代码很清晰  很好  赞
#46
疯狂的探索者2007-10-30 20:42
不错的
#47
liujun13142007-10-31 19:48
顶!好东西,刚好在学这!
#48
zhangdechun2007-11-29 22:06
出错了哦
出现这样的错误
Microsoft VBScript 编译器错误 '800a0409'

未结束的字符串常量

\www\pict\Action.Asp, line 56


   如果我把 conn.asp的代码改简单点不会有问题吗 >>.???
#49
zhangdechun2007-11-29 22:16
谢谢
为什么没人给我说啊
  很久的帖子了哈
没人看见吗
  斑竹你在吗?
能给我个解释吗?
#50
zhangdechun2007-11-29 22:18
顶起来
很就的帖子了
  又顶了起来
谁能帮帮我
#51
阳光白雪2007-12-08 10:22
To:zhangdechun
conn.asp中的代码可以修改,作用只是建立数据库连接,
12