|
蓝森林 http://www.lslnet.com 2006年8月25日 8:28
[ASP]先锋无组件上传问题!!再次求助!!急!!
请版主谅解,由于比较着急,所以重发此贴。。。
我使用“先锋无组件上传类”上传图片,遇到一个问题,不知如何解决。
[download=http://www.mf100.com/down.asp?url=/upload_down/2005107194241/clsUp.rar&id=212]先锋无组件上传类下载[/download]
up.html内容如下:
<form name=f1 action="up.asp" method="post" enctype="multipart/form-data">
<input type=text name="proname"><br>
<input type=file name="bigpic"><br>
<input type=file name="smallpic"><br>
<input type="submit" name="Submit" value="上传" >
</form>
现在想用此组件把两张图片同时上传到目录下,并把文本值和图片上传后的文件名存入数据库(Data.mdb)相应的字段里(proname、bigpic、smallpic字段)。
[color=#ff0000]请问各位前辈怎么实现??!!!谢谢!![/color]
如果是只保存一张图片我可以实现(并且存入数据库),可是现在只能把图片上传,文件名只能取一个存入数据库。
上传程序up.asp是这样的:
<!--#include FILE="conn.asp"-->
<!--#include FILE="clsUp.asp"-->
<%
dim upfile,formPath,ServerPath,FSPath,formName,FileName,oFile,rs,conn
set upfile=new clsUp ''建立上传对象
upfile.NoAllowExt="asp;exe;htm;html;aspx;cs;vb;js;" '设置上传类型的黑名单
upfile.GetData (200000) '取得上传数据,限制最大上传200K
if upfile.isErr then '如果出错
select case upfile.isErr
case 1
Response.Write "你没有上传数据呀???是不是搞错了??"
case 2
Response.Write "你上传的文件超出我们的限制,最大10M"
end select
else
set rs=Server.CreateObject("adodb.recordset")
rs.Open "select * from product",conn,1,3
FSPath=GetFilePath(Server.mappath("upfile.asp"),"\")'取得当前文件在服务器路径
ServerPath=GetFilePath(Request.ServerVariables("HTTP_REFERER"),"/")'取得在网站上的位置
for each formName in upfile.file '列出所有上传了的文件
set oFile=upfile.file(formname)
FileName=oFile.filename
upfile.SaveToFile formname,FSPath&FileName ''保存文件 也可以使用AutoSave来保存,参数一样,但是会自动建立新的文件名
if upfile.isAllowExt(oFile.FileExt) then
rs.AddNew
rs("Proname")=upfile.form(proname)
rs("smallpic")=FileName '这句怎么写???
rs("bigpic")=FileName '这句怎么写???
rs.Update
end if
if upfile.isAllowExt(oFile.FileExt) then
Response.Write "上传成功"
else
Response.Write "不允许上传的类型"
end if
set oFile=nothing
next
rs.Close
set rs=nothing
end if
set upfile=nothing '删除此对象
%>
这是我在网吧临时写出来的,原程序和这差不多,执行时没有报错,就是smallpic和bigpic的值总是一样的。不知道rs("smallpic")=FileName
rs("bigpic")=FileName '这两句到底该怎么写???才能够取到各个上传后的文件名的值。
[color=#ff0000]请高手指教,能否帮我修改一下。[/color]
[b]在线等!!![/b]
|
你只有两个文件,就不要用for next循环了……
for next循环主要用在文件数目不定的场合。
你这里可以直接用upfile.file("bigpic")和upfile.file("smallpic")来引用两个文件。
两个文件分别check后,就可以保存到数据库了。
文件名就是两个保存的文件名,有什么疑问吗? |
里面有一个保存文件的语句:
upfile.SaveToFile oFile1.FileName,FSPath&FileName1 '保存文件 也可以使用AutoSave来保存,参数一样,但是会自动建立新的文件名
我改成这样的:
upfile.SaveToFile oFile1.FileName,FSPath&FileName1 '保存文件 也可以使用AutoSave来保存,参数一样,但是会自动建立新的文件名
可是用上传上去的文件总是0K,请问这句该怎么写?还是其它地方有问题?
部分内容如下:
。。。
'上传图片
FSPath=Server.mappath("..\ShopPic\")&"\"
set oFile1=upfile.file("smallpic")
set oFile2=upfile.file("bigpic")
if oFile1.FileSize=0 and oFile2.FileSize=0 then
response.write"<script>alert('您没有上传图片');history.go(-1);</script>"
response.end
end if
if oFile1.FileSize>0 and oFile1.FileSize<200000 then
FileName1="Shop_S_"&upfile.GetNewFileName&"."&upfile.GetFileExt(oFile1.FileName)
else
response.write"<script>alert('上传图片大于200K');history.go(-1);</script>"
response.end
end if
if oFile2.FileSize>0 and oFile2.FileSize<500000 then
FileName2="Shop_B_"&upfile.GetNewFileName&"."&upfile.GetFileExt(oFile2.FileName)
else
response.write"<script>alert('上传图片大于500K');history.go(-1);</script>"
response.end
end if
upfile.SaveToFile oFile1.FileName,FSPath&FileName1 ''保存文件1
upfile.SaveToFile oFile2.FileName,FSPath&FileName2 ''保存文件2
if upfile.iserr then
Response.Write upfile.errmessage
end if
smallpic=FileName1
bigpic=FileName2
set oFile1=nothing
set oFile2=nothing
。。。。。。。。 |
upfile.SaveToFile "smallpic",FSPath&FileName1 ''保存文件1
upfile.SaveToFile "bigpic",FSPath&FileName2 ''保存文件2
===============
应该这样吧。 |
其实我对这个的原理始终还是不怎么明白的。
这句:
for each formName in upfile.file '列出所有上传了的文件
.....
Next
是什么意思?还有formName和upfile.file的值又是什么呢?我用response.write显示为空。
(For Each...Next: 对于集合中的每项或数组中的每个元素,重复执行一组语句。)
upfile.SaveToFile "smallpic",FSPath&FileName1 ''保存文件1
这个地方的"smallpic"是什么意思?
原始的例子是这样的:
upfile.SaveToFile FormName,FSPath&FileName1 ''保存文件1
|
formName就是表单项目名,你这里就是smallpic,bigpic,就是每个框框的名字。
upfile.file是一堆上传文件的集合,你可以循环他。 |
LZ,不能下载啊? |
|