主题:  求救:怎样实现ASP无组件上传gif和jpg格式的图形文件?

yeaome

职务:普通成员
等级:1
金币:0.0
发贴:18
注册:2001/9/14 13:15:55
#12001/11/19 9:37:56
求救:怎样实现ASP无组件上传gif和jpg格式的图形文件?
我用数据库为sql server2000,我想在数据库中放图片的路径,上传的图片放在一个指定的文件夹中,并且所有上传到该文件夹中的图片均不得重名!请教各位大虾!谢谢!



5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
注册:2001/11/7 20:32:29
#22001/11/19 11:27:47
无组件上传,在asp环境下尚没有很好的方法。如果是在asp.net下,可以很容易办到。



5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:320
注册:2001/8/17 18:10:31
#32001/11/19 14:19:27
在ASP环境下也有好的方法,我以前写过一个小的程序让网友给我上传照片的。需要的话就发给你了。



5D荣誉斑竹

职务:普通成员
等级:1
金币:1.0
发贴:131
注册:2001/1/25 21:29:26
#42001/11/19 17:04:59
魔药9号在上个帖子中说
引用:
在ASP环境下也有好的方法,我以前写过一个小的程序让网友给我上传照片的。需要的话就发给你了。


您好,我也要,我的email:wufeng0524@sina.com,多谢



thisin

职务:普通成员
等级:2
金币:1.0
发贴:331
注册:2001/9/21 0:26:12
#52001/11/19 18:29:34
魔药9号在上个帖子中说
引用:
在ASP环境下也有好的方法,我以前写过一个小的程序让网友给我上传照片的。需要的话就发给你了。

您好,我也要,我的thisin@163.com,多谢



5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
注册:2001/11/7 20:32:29
#62001/11/19 23:32:51
下面将介绍一系列可以不用组件,而使用纯粹的ASP代码来上传文件
呵呵,我想这将给很多拥有个人主页的网友带来极大的方便。
这个纯ASP代码由三个包含文件组成,代码中只使用了FileSystemObject
和Direction两个ASP固有对象。而不需要任何附加的组件,注意,为了保证
这段代码的出处,我没有对代码中的任何地方进行过修改。
希望能够对大家有所帮助:
文件fupload.inc




文件futils.inc

文件fformat.inc



下面的第一个例子为只是将客户端的文件上传到服务端的例子
第二个例子为将文件内容保存入数据库中。
文件fupload.asp
<%
dim ResultHTML
'Some value greater than default of 60s (According to upload size.)
'The maximum speed is about 100kB/s for IIS4, P200 and local upload, 4kB/s for modem users.
Server.ScriptTimeout = 400

If Request.ServerVariables("REQUEST_METHOD") = "POST" Then 'Request method must be "POST" for get the fields
' BeginTimer 'Starts timer.
'************************************************* Main Upload - start
Dim Fields
' on error resume next
'Set upload limit to 10M
UploadSizeLimit = 10000000

'Gets uploaded fields
Set Fields = GetUpload()

'There are all of form fields in the Fields object. Example :
'Fields("File1").ContentType - content type of File1 field
'Fields("File1").value - Binary value of File1 field
ResultHTML = ""
If Err = 0 Then 'Upload was OK
'Write statistics about upload
dim Field

For Each Field In Fields.Items
ResultHTML = ResultHTML & "
Field : " & LogF(Field.name) & ", Length : " & LogFn(Field.Length) & ", Content-Type : " & LogF(Field.ContentType) & ", SourceFileName :?b>" & LogF(Field.FileName) & ""
Next

'Saves the fields to the disk, writes result to the client and writes log.
'See utils.inc. You can change the function to save the files to another location.
ResultHTML = ResultHTML & "
" & SaveUpload(Fields, Server.MapPath("."), LogFolder)
Else 'Error in upload. Write the error
ResultHTML = ResultHTML & "
Error : " & Err.Description
End If
On Error GoTo 0
Fields = Empty 'Clear the variable
'************************************************* Main Upload - end
' EndTimer 'Writes info about consumed time.
End If 'Request method must be "POST"

%>

<%'upload.inc, contains GetUpload function, Required for upload - only the one file%>
<%'utils.inc, contains SaveUpload function%>

<%'format.inc, contains head and Foot function, optional.%>

<%=Head("Sample multiple binary files upload via ASP", "Demonstrates using of the ByteArray class for working with binary data from Request.BinaryRead.")%>











File???input type="file" name="File1">

File???input type="file" name="File2">


add a file

Checkbox
Password
Comments
Description


?%=ResultHTML%>

<%=Foot%>

文件fdbutl.asp将文件内容保存如数据库中
<%'upload.inc, contains GetUpload function, Required for upload - only the one file%>

<%'format.inc, contains head and Foot function, optional.%>

<%=Head("Sample database upload via ASP", "Demonstrates using of the ByteArray class for working with binary data from Request.BinaryRead.")%>








File to upload
Title
Description

<%=Foot%>





下面是w3 upload组件的例子
jscript: var w3u = Server.CreateObject( "w3.upload" );
var fileField = w3u.form( "myFile" );
var fileName = fileField.fileName;
fileField.SaveToFile( "c:\\temp\\" +fileName );
vbscript: dim w3u, fileField,
fileName SET w3u = Server.CreateObject( "w3.upload" )
SET fileField = w3u.form( "myFile" )
fileName = fileField.fileName
fileField.SaveToFile "c:\temp\" & fileName
Setting maximum filesize
dim w3u, fileField, fileName
SET w3u = Server.CreateObject( "w3.upload" )
SET fileField = w3u.form( "myFile" ) ' As the maxsize is set
in bytes, we calculate 1024 bytes times 1024 ' and then times 8, which gives us a 8mb maxsize FileField.maxSize = 1024*1024*8
fileName = fileField.fileName
ON error resume NEXT
fileField.SaveToFile "c:\temp\" & fileName ' If the maxsize is exceeded, w3 Upload throws an error
IF err.number <> 0 THEN
Response.write "File too big"
END IF
Limit uploads to a certain content type dim w3u, fileField, fileName

SET w3u = Server.CreateObject( "w3.upload" )
SET fileField = w3u.form("myFile" )

IF FileField.contentType = "image/gif" THEN

fileField.SaveToFile "c:\tem p\" & fileName

ELSE

Response.write "Not a valid content type"

END IF
w3.FormField
error '8000ffff' Win32 Error. Code: 5. Access is denied The error (5) indicates a permission problem on the target path.
Check that there's sufficient WRITE permissions in this directory (or file you're wrtiting to).
Note that if you are using Request.ServerVariables ( "APPL_PHYSICAL_PATH" ), then this is the APPLICATION path, not necessarily the same path as the current ASP file is executed in.





5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
注册:2001/11/7 20:32:29
#72001/11/19 23:35:51
干脆,我才来提供一个更简单的asp无组件文件上传示例
文件:uploadtest.asp


Untitled Document





 

text1:
  
 


 

text2:
  
 


 

txtarea:
  
 


 

file:
  
 


 


  
  
 






文件:showdata.asp

  <%
   'Fields("xxx").Name 取得Form中xxx(Form Object)的名字
   'Fields("xxx").FilePath 如果是file Object 取得文件的完整路径
   'Fields("xxx").FileName 如果是file Object 取得文件名
   'Fields("xxx").ContentType 如果是file Object 取得文件的类型
   'Fields("xxx").Length 取得Form中xxx(Form Object)的数据长度
   'Fields("xxx").value 取得Form中xxx(Form Object)的数据内容
   Dim FormData,FormSize
   FormSize=Request.TotalBytes
   FormData=Request.BinaryRead(FormSize)
   Set Fields = GetUpload(FormData)
   response.write "text1:" & Fields("text1").value & "
" & VbCrLf
   response.write "text2:" & Fields("text2").value & "
" & VbCrLf
   response.write "textarea:" & Fields("textfield").value & "
" & VbCrLf
   response.write Fields("newfile").FileName
   response.write Fields("newfile").ContentType
   Response.ContentType = Fields("newfile").ContentType
   If Fields("newfile").FileName<>"" Then
     Response.ContentType = Fields("newfile").ContentType
     response.binarywrite Fields("newfile").value
   End If
   
   'Response.BinaryWrite FormData
  %>

编辑历史:[这消息被wincheer编辑过(编辑时间2001-11-19 23:38:54)]


5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
注册:2001/11/7 20:32:29
#82001/11/19 23:37:46
在来看一个支持中文的无组件文件上传:
文件名:upload.inc

说明:支持中文的无组件文件上传ASP函数,由于ASP不支持二进制写入文件,所以存成文件时必须使用组件,本函数只提供截取上传文件的数据,可以写入到数据库。




5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
注册:2001/11/7 20:32:29
#92001/11/19 23:40:38


以前,如果要用ASP操作文件,比如移动、复制、删除或者创建一个记事本文件,基本上都是通过FILESYSTEMOBJECT对象做的,当然,这个东西很专业,也没说什么不好,它可以提供完善的文件信息,比如建立时间,大小,上次修改时间等等,但是如果你不做痛苦的高代价的字符格式转换的话,利用它你无法直接操作二进制文件。

但是,现在我们介绍的stream物件可以同时操作文本对象和二进制对象,要求是您的机器上要安装有ADO2。5或者更高版本,您可以从http://www.microsoft.com/data里去DOWN的。

这个stream对象包含了许多操作二进制和文本文件的方法,让我们来看例子吧

打开stream对象

<%'Create a Stream instanceDim objStreamSet objStream = Server.CreateObject("ADODB.Stream")'Open the streamobjStream.Open
对于以上的引用,如果您有不明白的地方,可以看我以前贴的帖子,具体什么名字忘记了

注意:如果版本不对以上代码会提示错误信息的。
现在您已经建立了一个0长度的STREAM,任何时候,你都可以使用size属性看改stream的大小,现在我们要指定操作什么类型的信息,二进制还是text ,如果是text还要指定是ASCII还是UNICODE格式

如下代码:
objStream.Type = adTypeText
objStream.Charset = "ascii"

接下来我们向这个stream里写进一个text文件,用它的loadfromfile方法

objStream.LoadFromFile "D:\Inetpub\wwwroot\webtech\083100-1.shtml"

在这里要注意的是,如果你操作stream,一定要搞清楚位置的概念,这里我们使用了loadfromfile方法以后,原来stream里的内容会被全部清除,然后,该文件被装载到stream里面,接着stream的位置恢复为0,(stream的开始位置)
你如果在当前0位置写入信息,就会覆盖原来的内容,所以你如果想要追加东西的话,必须从最后位置开始操作,如下代码:

objStream.Position = objStream.Size

该代码把当前位置移到最后

现在我们可以往后面加东西了,嘿嘿,比如

objStream.WriteText "请访问asp.net中文专业网,MM尤其欢迎"

哈哈
现在我们达到了我们的目的了,让我们把它保存下来
这里要注意的是因为你是用iuser_machinename的帐号的,所以相应目录要对该帐号开放写权限的,这个是没办法的事,不然会出错。

objStream.SaveToFile"D:\InetPub\wwwroot\demos\StreamDemo.txt", adSaveCreateOverwrite

继承我们的优良传统,使用完以后,关闭释放

'Close the stream and set it to nothing...
objStream.Close
Set objStream = Nothing
%>

前面我也说过,它也能操作二进制对象,其实只要修改一些参数就可以了,让我们来看一个例子:


<%
 'Create a stream object
 Dim objStream
 Set objStream = Server.CreateObject("ADODB.Stream")
 
 'Open a GIF file
 objStream.Type = adTypeBinary
 objStream.Open
 objStream.LoadFromFile "D:\Inetpub\wwwroot\images\banner\dimacbanner1.gif"
 
 'Output the contents of the stream object
 Response.ContentType = "image/gif"
 Response.BinaryWrite objStream.Read
 
 'Clean up....
 objStream.Close
 Set objStream = Nothing
%>

你可以试试用这个写一个上传的东西,这样学习起来快,反正有现成的老师在,可以参考




nnsk8

职务:普通成员
等级:1
金币:0.0
发贴:15
注册:2001/9/20 17:10:57
#102001/11/20 12:06:18
呵呵,用UD很容易实现!