哪位大虾给写一个简单的无组件图片上传的例子(分不够再加)

楼主steelabeer(民工)2002-12-21 22:24:58 在 Web 开发 / ASP 提问

1,只能上传gif.jpg格式  
  2,图形大小可以控制  
  3,图形和文本在一个界面里并且是一起存库的 问题点数:100、回复次数:5Top

1 楼steelabeer(民工)回复于 2002-12-22 12:01:10 得分 0

lubhh@163.comTop

2 楼meizz(梅花雪)回复于 2002-12-22 12:05:23 得分 31

到本版里的FAQ里看看。Top

3 楼xcgh(晓刚)回复于 2002-12-22 12:25:42 得分 41

下面是ASP无组件上传图片的一个例子:  
   
    <html>  
    <head><title>文件上传</title></head>  
    <body>  
    <form   enctype="multipart/form-data"   action="upload.asp"   method="post">  
    请选择要上传的文件:   <br>  
    <input   name="picture"   type=file   accept="image/*"><br>  
    <input   type=submit   value="上传"></form>  
    </body>  
    </html>  
   
    当html文件在Netscape   Navigator(3.0以上版本)或Internet   Explorer(4.0以上版本)下显示时,“浏览”键旁边会出现一个看上去很普通的文本框。用户可直接将文件名键入文本框,或用“浏览”键从文件对话框中选择一个文件。提交该表单时,用户所选文件被同时提交。  
    <form>标签的enctype特征规定了请求表单信息的编码类型。表单信息一般采用URL编码制。不过上传文件时,必须用enctype="multipart/form-data"特征。  
    实际的文件上载键用下面的标签创建:    
    <input   name="picture"   type=file   accept="image/*">  
    因为type的特征值是file,所以浏览器会创建一个文件上载键。accept特征限制了在文件对话框中出现的特定文件,这种情况下文件类型限制为图文件。可以规定任何MIME类型的清单作为accept的特征值。  
    文件上载键非常有用,遗憾的是许多浏览器只是部分支持上载键。例如Netscape   Navigator(3.0及4.0版本)忽略了accept特征,IE   3.0版本甚至更差,它完全不能解释上载键,而是显示普通的文本框。不过IE   4.0和5.0版本可识别文件上载键。  
    创建带文件上载键的html表单只是上传文件的第一步,提交带上载键的文件不能用request对象的普通方法获得文件内容。ASP中request对象有专门用作此目的的特殊方法。当表单被邮递后,request对象的BinaryRead()方法用来读取提交的原始字节。注意:一旦在ASP中使用了BinaryRead()方法,就不能用普通的Request.Form()方法获取表单数据了(反之亦然)。  
    假定用户使用前面提到的表单提交了一幅图片,那么可以用下面的脚本获取并显示提交的原始字节。  
   
    <%  
    FormSize=Request.TotalBytes  
    FormData=Request.BinaryRead(FormSize)  
    Response.BinaryWrite   FormData  
    %>  
   
    上面的脚本用Request对象的TotalBytes特征获取送入http站点的字节数。然后,所有的表单数据被赋给名为FormData的变量。最后用Response对象的BinaryRead()方法输出上载的数据内容。  
    但是用这种方法输出的脚本不是完全可读的,它包含上载文件的所有原始数据及有关该文件内容的重要信息。  
    得到数据后可以保存在数据库中、文件中或仅仅显示它,甚至可以快速地改变原始图像数据来创建定制图像。下面的脚本去掉了文件头,并显示作为图像在浏览器上载的文件。  
   
    <%  
    FormSize=Request.TotalBytes  
    FormData=Request.BinaryRead(FormSize)  
    bnCRLF=chrB(13)   &   chrB(10)  
    Divider=LEFTB(FormData,INSTRB(FormData,bnCRLF)-1)  
    DataStart=INSTRB(FormData,bnCRLF   &   bnCRLF)+4  
    DataEnd=INSTRB(DataStart+1,FormData,divider)-DataStart  
    Response.ContentType="image/gif"  
    Response.BinaryWrite   MIDB(FormData,DataStart,DataEnd)  
    %>  
   
    上面的脚本用INSTRB()函数从表单数据中摘出图象数据,找到起始位置。它假定图象数据以两个回车和换行符开始,并以同样的分隔符结束。然后用Response对象的ContenType规定送入浏览器的内容是GIF图象。最后用BinaryWrite()方法输出数据。图片就显示在浏览器上。  
    上面的脚本假定提交的表单只包含一个含有图像数据的域。不过包含文件上载元素的html表单还可包含其他标准元素,例如文本框、文本区等。  
    尽管可以用标准的ASP脚本处理复杂的表单,但最好还是使用第三方ASP组件,可以用与处理标准html表单的相同方法,处理包含文件上载元素的表单。Top

4 楼xcgh(晓刚)回复于 2002-12-22 12:26:15 得分 17

一:前言  
   
        首先,没有料到图片与文本的上传会引起这么大的注意。上一篇贴子(Id=435906)贴出后,有不少人来信说看不懂。或  
  是仍然不能实现。我就以一种完全简单的手法。完成无组件的文本与图片上传数据库所有过程。希望能帮助所有对此有疑  
  问的网友。  
   
  二:准备工作  
   
          按照惯例,我先将我的测试环境告诉大家。  
          系统:Win98se   +   pws   +   asp    
          编程环境:Visual   Interdev   6.0    
          数据库:Access2000   (因为网友问的最多的都是Access2000的问题。)  
          建一个库:access2000中,先建好一个Test.mdb的数据库。具体有四个字段。  
          id           |     text1   |   text2   |   img  
      自动编号         文本           文本       OLE对象                 ’如果是sql   server   则选择(image即可)  
   
  三:Are   you   ready   ,Go!!!  
   
  3-1.建上传表单:  
          我们知道,图像与文本是两种不同制式的文件(二进制,流式文本)而如果要同一表单提交的话,(file格式提交)则  
  我们获取时就不能用原来的方法request.form而必须用equest.TotalBytes来获得所有的提交资料。但这时两种格式的文件  
  混合在一起比较难分。我的上一贴已经告诉大家用二进制的方法来分开这些资料。但十分麻烦,要用到许多二进值的函  
  数,所以许多网友来信问我有没有更简单的方法,好。我可以告诉大家,有!而且保证下面的方法保证一学就会。(这种方  
  法很另类但伟人说过白猫,黑猫。能上网的就是好猫!)  
   
  upload.asp(具体代码如下)  
           
  <%   @   language=vbscript   %>  
  <html>  
  <head>  
  <meta   name="VI60_defaultClientScript"   content="VBScript">  
  <title>   File   Upload   </title>  
  <script   ID="clientEventHandlersVBS"   LANGUAGE="vbscript">  
  <!--                                                        
  Sub   form2_onsubmit                               //**   这里是关键,当form2在提交的过程中时,即活form1的提交  
          form1.submit                           //**所以我们这里用了两个表单,但只用一个提交就可以了。  
  End   Sub  
  -->  
  </script>  
  </head>  
  <body>  
   
  <form   name="form1"   ENCTYPE="multipart/form-data"   ACTION="upimage.asp"   METHOD="POST"   target="_blank">  
  Please   choose   a   picture   to   upload:   <br>  
  <input   NAME="picture"   TYPE="FILE">   <br>  
  </form>  
   
  <form   name="form2"   action="uptext.asp"   method="post">  
  <input   type="text"   name="text1"><br>  
  <input   type="text"   name="text2"><br>  
  <input   type="submit"   value="提交">  
  </form>  
   
  </body>  
  </html>  
   
  3-2   兵分两路来处理数据。  
          首先,文本很简单。  
   
  uptext.asp   (代码如下)  
   
  <%   @   language=vbscript   %>  
  <%  
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
   
  text1=request.form("text1")  
  text2=request.form("text2")  
  response.write   text1  
  response.write   text2  
   
  set   rs=Server.CreateObject("adodb.recordset")  
  sql="SELECT   top   1   *   FROM   imgtable   ORDER   BY   id   DESC"     ’这里的意思是选择最后一个Id,既刚刚被改动  
  rs.Open   sql,strconn,1,3                                                             ’就是你上传的图像的两个文本字段。  
   
  rs("text1")=text1                                                                         ’注意,这里是改动不是添加,所以不用addnew。  
  rs("text2")=text2  
  rs.Update  
  rs.Close  
  %>  
          接着,来处理图像。  
  upimage.asp   (具体代码如下)  
   
  <%  
  FormSize   =   Request.TotalBytes                                   ’得到数据  
  FormData   =   Request.BinaryRead(   FormSize   )  
   
  function   ImageUp(formsize,formdata)                     ’这个函数的功能是截取其中的图像部分。  
          bncrlf=chrb(13)   &   chrb(10)                       ’做成函数后。以后你可以自己随意使用了。  
          divider=leftb(formdata,instrb(formdata,bncrlf)-1)  
          datastart=instrb(formdata,bncrlf&bncrlf)+4  
          dataend=instrb(datastart+1,formdata,divider)-datastart  
          imageup=midb(formdata,datastart,dataend)  
  end   function  
   
  Image=ImageUp   (FormSize,Formdata)                           ’这里就是图像部分了。  
   
  set   rs=server.CreateObject("adodb.recordset")  
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
  sql="SELECT   *   FROM   imgtable"  
  rs.Open   sql,strconn,1,3  
   
  rs.AddNew                                                                           ’因为表单二在表单一提交的过程中下提交了。  
  rs("img").appendchunk   Image                                       ’所以这里是添加。  
  rs.Update  
  rs.Close  
   
   
  response.contenttype="image/gif"                                    
  response.binarywrite   imageup(formsize,formdata)     ’这里是显示图像。表示成功!  
   
  %>  
   
  啊?!?!原来如此简单!  
   
  四:“显示,我要同页显示”  
  终于完成了图文同步提交。(真的是同步吗?不是吗?是吗?   唉,我们只是为了解决问题。何必当真哪?不  
  是                                                     吗?)  
  现在我们还要让他同页显示出来。其实,这是同样的思路。我们也用两页来完成。  
   
  主页面:show.asp  
   
  <%@   Language=VBScript   %>  
  <%    
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
   
  set   rs=Server.CreateObject("adodb.recordset")  
  sql="SELECT   top   1   *   FROM   imgtable   ORDER   BY   id   DESC"  
  rs.Open   sql,strconn,1,3  
  %>  
  <html>  
  <body>  
  以下是你的上传资料。<br>  
  文本一:<%   Response.Write   rs("text1")   %><br>  
  文本二:<%   Response.Write   rs("text2")   %><br>  
   
  你的图像:  
  <img   src=showimg.asp?id=<%=rs("id")%>>                       ’注意这里,这才是关键。他可以实现网页图像与文本  
  </body>                                                                                     ’共存。    
  </html>  
   
  幕后页面:showimg.asp                 (说他是幕后的页面,因为他潜伏在主页面里。看上是一个页面一样)  
   
  <%@   Language=VBScript   %>  
  <%  
  strconn="driver={microsoft   access   driver   (*.mdb)};dbq="&server.MapPath("test.mdb")  
  id=Request("id")  
  set   rs=server.CreateObject("adodb.recordset")  
  sql="SELECT   *   FROM   imgtable   where   id="&id  
  rs.Open   sql,strconn,1,3  
  response.contenttype="image/gif"  
  Response.BinaryWrite   rs("img")  
  %>  
   
  (全文完:希望本文能帮助那些急于想解决本类问题的网友。)    
  以上是粘的Top

5 楼clkun(我来是学习)回复于 2002-12-22 12:43:35 得分 11

万分感谢!楼主该结贴呢!:)Top

你可能对以下的问题也比较感兴趣....