蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 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,不能下载啊?




Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com