asp图片上传源码下载(asp商业源码)
今天给各位分享asp图片上传源码下载的知识,其中也会对asp商业源码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
怎样用asp实现图片上传到文件夹,路径保存在access数据库中
用ASP编写网站应用程序时间长了,难免会遇到各式各样的问题,其中关于如何上传文件到服务器恐怕是遇见最多的问题了,尤其是上传图片,比如你想要在自己的社区里面实现类似网易虚拟社区提供的“每日一星”的功能,就要提供给网友上传照片的功能。上传图片文件到服务器可以使用各种免费的文件上传组件,使用起来功能虽然很强大,但是由于很多情况下,我们只能使用免费的支持ASP的空间或者租用别人的虚拟空间,对于第一种情况,我们根本就没有可能来使用文件上传组件;至于第二种情况,我们也要付出不少的“银子”才可以。除非你拥有自己的虚拟主机,你就可以随便的在服务器上面安装自己所需要的组件,这种情况对于大多数人来说是可望而不可及的。那我们就没有办法了吗?呵呵,答案是肯定的(当然是肯定的了,要不然我也没法写出这篇文章啊)。下面就让我们一起来使用纯ASP代码来实现图片的上传以及保存到数据库的功能(顺便也实现显示数据库中的图片到网页上的功能)。
首先我们先来熟悉一下将要使用的对象方法。我们用来获取上一个页面传递过来的数据一般是使用Request对象。同样的,我们也可以使用Request对象来获取上传上来的文件数据,使用的方法是Request.BinaryRead()。而我们要从数据库中读出来图片的数据显示到网页上面要用到的方法是:
Request.BinaryWrite()。在我们得到了图片的数据,要保存到数据库中的时候,不可以直接使用Insert语句对数据库进行操作,而是要使用ADO的AppendChunk方法,同样的,读出数据库中的图片数据,要使用GetChunk方法。各个方法的具体语法如下:
*Request.BinaryRead语法:
variant=Request.BinaryRead(count)
参数
variant
返回值保存着从客户端读取到数据。
count
指明要从客户端读取的数据量大小,这个值小于或者等于使用方法Request.TotalBytes得到的数据量。
*Request.BinaryWrite语法:
Request.BinaryWritedata
参数
data
要写入到客户端浏览器中的数据包。
*Request.TotalBytes语法:
variant=Request.TotalBytes
参数
variant
返回从客户端读取到数据量的字节数。
*AppendChunk语法
将数据追加到大型文本、二进制数据Field或Parameter对象。
object.AppendChunkData
参数
objectField或Parameter对象
Data变体型,包含追加到对象中的数据。
说明
使用Field或Parameter对象的AppendChunk方法可将长二进制或字符数
据填写到对象中。在系统内存有限的情况下,可以使用AppendChunk方法对长整型值进行部分而非全部的操作。
*GetChunk语法
返回大型文本或二进制数据Field对象的全部或部分内容。
variable=field.GetChunk(Size)
返回值
返回变体型。
参数
Size长整型表达式,等于所要检索的字节或字符数。
说明
使用Field对象的GetChunk方法检索其部分或全部长二进制或字符数据。在系统内存有限的情况下,可使用GetChunk方法处理部分而非全部的长整型值。
GetChunk调用返回的数据将赋给“变量”。如果Size大于剩余的数据,则
GetChunk仅返回剩余的数据而无需用空白填充“变量”。如果字段为空,则
GetChunk方法返回Null。
每个后续的GetChunk调用将检索从前一次GetChunk调用停止处开始的数据。但是,如果从一个字段检索数据然后在当前记录中设置或读取另一个字段的值,ADO将认为已从第一个字段中检索出数据。如果在第一个字段上再次调用GetChunk方法,ADO将把调用解释为新的GetChunk操作并从记录的起始处开始读取。如果其他Recordset对象不是首个Recordset对象的副本,则访问其中的字段不会破坏GetChunk操作。
如果Field对象的Attributes属性中的adFldLong位设置为True,则可以对该字段使用GetChunk方法。
如果在Field对象上使用Getchunk方法时没有当前记录,将产生错误3021(无当前记录)。
接下来,我们就要来设计我们的数据库了,作为测试我们的数据库结构如下(access2000):
字段名称类型描述
id自动编号主键值
img OLE对象用来保存图片数据
对于在MSSQLServer7中,对应的结构如下:
字段名称类型描述
id int(Identity)主键值
img image用来保存图片数据
现在开始正式编写我们的纯ASP代码上传部分了,首先,我们有一个提供给用户的上传界面,可以让用户选择要上传的图片。代码如下
(upload.htm):
<html>
<body>
<center>
<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=post>
<inputtype=filename=mefile><br>
<inputtype=submitname=okvalue="OK">
</form>
</center>
</body>
</html>
注意enctype="multipart/form-data",一定要在Form中有这个属性,否则,将无法得到上传上来的数据。接下来,我们要在process.asp中对从浏览器中获取的数据进行必要的处理,因为我们在process.asp中获取到的数据不仅仅包含了我们想要的上传上来的图片的数据,也包含了其他的无用的信息,我们需要剔除冗余数据,并将处理过的图片数据保存到数据库中,这里我们以access2000为例。具体代码如下(process.asp):
<%
response.buffer=true
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13)&chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3
rec.addnew
rec("img").appendchunkmydata
rec.update
rec.close
setrec=nothing
setconnGraph=nothing
%>
好了,这下我们就把上传来的图片保存到了名为images.mdb的数据库中了,剩下的工作就是要将数据库中的图片数据显示到网页上面了。一般在HTML中,显示图片都是使用<IMG>标签,也就是<IMGSRC="图片路径">,但是我们的图片是保存到了数据库中,“图片路径”是什么呢?呵呵,其实这个SRC属性除了指定路径外,也可以这样使用哦:
<IMGSRC="showimg.asp?id=xxx">
所以,我们所要做的就是在showimg.asp中从数据库中读出来符合条件的
数据,并返回到SRC属性中就可以了,具体代码如下(showimg.asp):
<%
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
strsql="selectimgfromimageswhereid="&trim(request("id"))
rec.openstrsql,connGraph,1,1
Response.ContentType="image/*"
Response.BinaryWriterec("img").getChunk(7500000)
rec.close
setrec=nothing
setconnGraph=nothing
%>
注意在输出到浏览器之前一定要指定Response.ContentType="image/*",
以便正常显示图片。
最后要注意的地方是,我的process.asp中作的处理没有考虑到第一页(upload.htm)中还有其他数据,比如<INPUT type=tesxt name=userid>等等,如果有这些项目,你的process.asp就要注意处理掉不必要的数据。
php源码高手请进!!!
1、安装php运行环境
2、安装数据库
3、将网站目录指向网站源码所在的文件夹
详细步骤如下:
===========
===========
===========
Windows 2000/XP/2003下 IIS+PHP+MySQL+Zend Optimizer+GD库+phpMyAdmin安装配置
关键词:Windows IIS下配置支持PHP+MYSQL
Apache下支持PHP的配置方法比较简单,这里就不写了
一般WIN主机推荐PHP环境组合:PHP4.4.x+MySQL4.0.x,故以下关于PHP4.4.x+MySQL4.0.x组合的安装以蓝色文字显示,如果你只需要安装PHP4.4.x+MySQL4.0.x的组合只看蓝色文字的相关内容即可
当然喜欢体验的或者WIN2003系统也可体验尝试最新的版本,推荐组合PHP5.1.x+MYSQL5.0.x/MySQL4.1.x
一、软件准备:以下均为截止2006-1-20的最新正式版本,下载地址也均长期有效
1.PHP,推荐PHP4.4.0的ZIP解压版本:
PHP(4.4.0):
[供选用]:
PHP(5.1.2):
2.MySQL,配合PHP4推荐MySQL4.0.26的WIN系统安装版本:
MySQL(4.0.26):
... p/from/pick#mirrors
[供选用]:
MySQL(4.1.16):
... p/from/pick#mirrors
MySQL(5.0.18):
... p/from/pick#mirrors
3.Zend Optimizer,当然选择当前最新版本拉:
Zend Optimizer(2.6.2):
(Zend软件虽然免费下载,但需要注册用户,这里提供本人注册好的帐户名:
xqincom
和密码:
xqin.com
,方便大家使用,请不要修改本帐号或将本帐户用于其他费正当途径,谢谢!)
登陆后选择Windows x86的Platform版本,如最新版本2.6.2
4.phpMyAdmin,当然同样选择当前最新版本拉,注意选择for Windows的版本哦:
phpMyAdmin(2.7.0):
假设 C:\为你现在所使用操作系统的系统盘,如果你目前操作系统不是安装在 C:\,请自行对应修改相应路径。同时由于C盘经常会因为各种原因重装系统,数据放在该盘不易备份和转移
选择安装目录,故本文将所有PHP相关软件均安装到D:\php目录下,这个路径你可以自行设定,如果你安装到不同目录涉及到路径的请对应修改以下的对应路径即可
二、安装 PHP:本文PHP安装路径取为D:\php\php4\
(为避混淆,PHP5.1.x版本安装路径取为D:\php\php5\)
(1)、下载后得到 php-4.4.0-Win32.zip,解压至D:\php目录,将得到二级目录php-4.4.0-Win32,改名为 php4,也即得到PHP文件存放目录D:\php\php4\[如果是PHP5.1.2,得到的文件是php-5.1.2-Win32.zip,直接全部接压至D:\php\php5目录即可得PHP文件存放目录D:\php\php5\
];
(2)、再将D:\php\php4目录和D:\php\php4\dlls目录[
PHP5为D:\php\php5\
]下的所有dll文件拷到c:\Windows\system32(win2000系统为 c:/winnt/system32/)下,覆盖已有的dll文件;
(3)、将php.ini-dist用记事本打开,利用记事本的查找功能搜索并修改:
搜索
CODE:
[Copy to clipboard]
register_globals= Off,将 Off改成 On,即得到register_globals= On;
注:这个对应PHP的全局变量功能,考虑有很多PHP程序需要全局变量功能故打开,打开后请注意-PHP程序的严谨性,如果不需要推荐不修改保持默认Off状态
再搜索
CODE:
[Copy to clipboard]
extension_dir=,并将其路径指到你的 PHP目录下的 extensions目录,比如:修改extension_dir="./"为extension_dir="D:/php/php4/extensions/";
PHP扩展功能目录[PHP5对应修改为extension_dir="D:/php/php5/ext/"]
在D:\php下建立文件夹并命名为tmp
查找
CODE:
[Copy to clipboard]
;upload_tmp_dir=将;upload_tmp_dir该行的注释符,即前面的分号“;”去掉,使该行在php.ini文档中起作用。upload_tmp_dir是用来定义上传文件存放的临时路径,在这里你还可以修改并给其定义一个绝对路径,这里设置的目录必须有读写权限。
这里我设置为upload_tmp_dir= D:/php/tmp(即前面建立的这个文件夹呵)
搜索找到
CODE:
[Copy to clipboard]
;Windows Extensions将下面一些常用的项前面的;去掉
CODE:
[Copy to clipboard]
;extension=php_mbstring.dll
CODE:
[Copy to clipboard]
;extension=php_curl.dll
CODE:
[Copy to clipboard]
;extension=php_dbase.dll
CODE:
[Copy to clipboard]
;extension=php_gd2.dll
这个是用来支持GD库的,一般需要,必选
CODE:
[Copy to clipboard]
;extension=php_ldap.dll
CODE:
[Copy to clipboard]
extension=php_zip.dll去掉前面的";"
对于PHP5的版本还需要查找
CODE:
[Copy to clipboard]
;extension=php_mysql.dll并同样去掉前面的";"
这个是用来支持MYSQL的,由于PHP5将MySQL作为一个独立的模块来加载运行的,故要支持MYSQL必选
查找
CODE:
[Copy to clipboard]
;session.save_path=去掉前面;号,本文这里将其设置置为
session.save_path= D:/php/tmp
其他的你可以选择需要的去掉前面的;然后将该文件另存为为php.ini到C:\Windows( Windows 2000下为 C:\WINNT)目录下,注意更改文件后缀名为ini,得到C:\Windows\php.ini( Windows 2000下为 C:\WINNT\php.ini)
本人配置成功后的PHP.INI文件示例可供大家参考:
对应版本为PHP4.4.0
对应版本为PHP5.1.12
若路径等和本文相同可直接保存到C:\Windows( Windows 2000下为 C:\WINNT)目录下使用若路径等和本文相同可直接保存到C:\Windows( Windows 2000下为 C:\WINNT)目录下使用
一些朋友经常反映无法上传较大的文件或者运行某些程序经常超时,那么可以找到C:\Windows( Windows 2000下为 C:\WINNT)目录下的PHP.INI以下内容修改:
max_execution_time= 30;这个是每个脚本运行的最长时间,可以自己修改加长,单位秒
max_input_time= 60;这是每个脚本可以消耗的时间,单位也是秒
memory_limit= 8M;这个是脚本运行最大消耗的内存,也可以自己加大
upload_max_filesize= 2M;上载文件的最大许可大小,自己改吧,一些图片论坛需要这个更大的值
(4)、配置 IIS使其支持 PHP:
首先必须确定系统中已经正确安装 IIS,如果没有安装,需要先安装 IIS,安装步骤如下:
Windows 2000/XP下的 IIS安装:
用 Administrator帐号登陆系统,将 Windows 2000安装光盘插入光盘驱动器,进入“控制面板”点击“添加/删除程序”,再点击左侧的“添加/删除 Windows组件”,在弹出的窗口中选择“Internet信息服务(IIS)”,点下面的“详细信息”按钮,选择组件,以下组件是必须的:“Internet服务管理器”、“World Wide Web服务器”和“公用文件”,确定安装。
安装完毕后,在“控制面板”的“管理工具”里打开“服务”,检查“IIS Admin Service”和“World Wide Web Publishing Service”两项服务,如果没有启动,将其启动即可。
Windows 2003下的 IIS安装:
由于 Windows 2003的 IIS 6.0集成在应用程序服务器中,因此安装应用程序服务器就会默认安装 IIS 6.0,在“开始”菜单中点击“配置您的服务器”,在打开的“配置您的服务器向导”里左侧选择“应用程序服务器(IIS,ASP.NET)”,单击“下一步”出现“应用程序服务器选项”,你可以选择和应用程序服务器一起安装的组件,默认全选即可,单击“下一步”,出现“选择总结界面”,提示了本次安装中的选项,配置程序将自动按照“选择总结”中的选项进行安装和配置。
打开浏览器,输入:
,看到成功页面后进行下面的操作:
PHP支持 CGI和 ISAPI两种安装模式,CGI更消耗资源,容易因为超时而没有反映,但是实际上比较安全,负载能力强,节省资源,但是安全性略差于CGI,本人推荐使用 ISAPI模式。故这里只解介绍 ISAPI模式安装方法:(以下的截图因各个系统不同,窗口界面可能不同,但对应选项卡栏目是相同的,只需找到提到的对应选项卡即可)
在“控制面板”的“管理工具”中选择“Internet服务管理器”,打开 IIS后停止服务,对于WIN2000系统在”Internet服务管理器“的下级树一般为你的”计算机名“上单击右键选择“属性”,再在属性页面选择主属性”WWW服务“右边的”编辑“
对于XP/2003系统展开”Internet服务管理器“的下级树一般为你的”计算机名“选择”网站“并单击右键选择“属性”
在弹出的属性窗口上选择“ISAPI筛选器”选项卡找到并点击“添加”按钮,在弹出的“筛选器属性”窗口中的“筛选器名称”栏中输入:PHP,再将浏览可执行文件使路径指向 php4isapi.dll所在路径,如本文中为:D:\php\php4\sapi\php4isapi.dll[PHP5对应路径为D:\php\php5\ php5isapi.dll
]。
打开“站点属性”窗口的“主目录”选项卡,找到并点击“配置”按钮
在弹出的“应用程序配置”窗口中的”应用程序映射“选项卡找到并点击“添加”按钮新增一个扩展名映射,在弹出的窗口中单击“浏览”将可执行文件指向 php4isapi.dll所在路径,如本文中为:D:\php\php4\sapi\php4isapi.dll[
PHP5对应路径为D:\php\php5\php5isapi.dll
],扩展名为.php,动作限于”GET,HEAD,POST,TRACE“,将“脚本引擎”“确认文件是否存在”选中,然后一路确定即可。如果还想支持诸如.php3,.phtml等扩展名的 PHP文件,可以重复“添加”步骤,对应扩展名设置为需要的即可如.PHPX。
此步操作将使你服务器IIS下的所有站点都支持你所添加的PHP扩展文件,当然如果你只需要部分站点支持PHP,只需要在“你需要支持PHP的Web站点”比如“默认Web站点”上单击右键选择“属性”,在打开的“ Web站点属性”“主目录”选项卡,编辑或者添加PHP的扩展名映射即可或者将你步需要支持PHP的站点中的PHP扩展映射删除即可
再打开“站点属性”窗口的“文档”选项卡,找到并点击“添加”按钮,向默认的 Web站点启动文档列表中添加 index.php项。您可以将 index.php升到最高优先级,这样,访问站点时就会首先自动寻找并打开 index.php文档。
确定 Web目录的应用程序设置和执行许可中选择为纯脚本,然后关闭 Internet信息服务管理器
对于2003系统还需要在“Internet服务管理器”左边的“WEB服务扩展”中设置ISAPI扩展允许,Active Server Pages允许
完成所有操作后,重新启动IIS服务。
在CMD命令提示符中执行如下命令:
net stop w3svc
net stop iisadmin
net start w3svc
到此,PHP的基本安装已经完成,我们已经使网站支持PHP脚本。
检查方法是,在 IIS根目录下新建一个文本文件存为 php.php,内容如下:
CODE:
[Copy to clipboard]
打开浏览器,输入:
,将显示当前服务器所支持 PHP的全部信息,可以看到 Server API的模式为:ISAPI。
或者利用PHP探针检测
下载后解压到你的站点根目录下并访问即可
三、安装 MySQL:
对于MySQL4.0.26下载得到的是mysql-4.0.26-win32.zip,解压到mysql-4.0.26-win32目录双击执行 Setup.exe一路Next下一步,选择安装目录为D:\php\MySQL和安装方式为Custom自定义安装,再一路Next下一步即可。
安装完毕后,在CMD命令行中输入并运行:
CODE:
[Copy to clipboard]
D:\php\MySQL\bin\mysqld-nt-install如果返回Service successfully installed.则说明系统服务成功安装
新建一文本文件存为MY.INI,编辑配置MY.INI,这里给出一个参考的配置
(
可以下载后直接保存到WINDOWS或者WINNT目录使用)
CODE:
[Copy to clipboard]
[mysqld]
basedir=D:/php/MySQL
#MySQL所在目录
datadir=D:/php/MySQL/data
#MySQL数据库所在目录,可以更改为其他你存放数据库的目录
#language=D:/php/MySQL/share/your language directory
#port=3306
set-variable= max_connections=800
skip-locking
set-variable= key_buffer=512M
set-variable= max_allowed_packet=4M
set-variable= table_cache=1024
set-variable= sort_buffer=2M
set-variable= thread_cache=64
set-variable= join_buffer_size=32M
set-variable= record_buffer=32M
set-variable= thread_concurrency=8
set-variable= myisam_sort_buffer_size=64M
set-variable= connect_timeout=10
set-variable= wait_timeout=10
server-id= 1
[isamchk]
set-variable= key_buffer=128M
set-variable= sort_buffer=128M
set-variable= read_buffer=2M
set-variable= write_buffer=2M
[myisamchk]
set-variable= key_buffer=128M
set-variable= sort_buffer=128M
set-variable= read_buffer=2M
set-variable= write_buffer=2M
[WinMySQLadmin]
Server=D:/php/MySQL/bin/mysqld-nt.exe保存后复制此MY.INI文件到C:\Windows( Windows 2000下为 C:\WINNT)目录下
回到CMD命令行中输入并运行:
CODE:
[Copy to clipboard]
net start mysqlMySQL服务正在启动.
MySQL服务已经启动成功。
将启动 MySQL服务;
DOS下修改ROOT密码:当然后面安装PHPMYADMIN后修改密码也可以通过PHPMYADMIN修改
格式:mysqladmin-u用户名-p旧密码 password新密码
例:给root加个密码xqin.com
首先在进入CMD命令行,转到MYSQL目录下的bin目录,然后键入以下命令
mysqladmin-uroot password xqin.com
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
D:\php\MySQL\bin>mysqladmin-uroot password xqin.com回车后ROOT密码就设置为xqin.com了
如果你下载的是 MySQL5.x或者MySQL4.1.x,例mysql-5.0.18-win32:解压后双击执行 Setup.exe,Next下一步后选择Custom自定义安装,再Next下一步选择安装路径这里我们选择D:\php\MySQL,继续Next下一步跳过Sign UP完成安装。
安装完成后会提示你是不是立即进行配置,选择是即可进行配置。当然一般安装后菜单里面也有配置向导MySQL Server Instance Config Wizar,运行后按下面步骤配置并设置ROOT密码即可
Next下一步后选择Standard Configuration
Next下一步,钩选Include.. PATH
Next下一步,设置ROOT密码,建议社设置复杂点,确保服务器安全!
Apply完成后将在D:\php\MySQL目录下生成MY.INI配置文件,添加并启动MySQL服务
如果你的MySQL安装出错,并且卸载重装仍无法解决,这里提供一个小工具系统服务管理器
,用于卸载后删除存在的MYSQL服务,重起后再按上述说明进行安装一般即可成功安装
四、安装 Zend Optimizer:
下载后得到 ZendOptimizer-2.6.2-Windows-i386.exe,直接双击安装即可,安装过程要你选择 Web Server时,选择 IIS,然后提示你是否 Restart Web Server,选择是,完成安装之前提示是否备份 php.ini,点确定后安装完成。我这里安装到D:\php\Zend
以下两步的目录根据你自己的默认WEB站点目录来选,当然也可以选择到D:\php\Zend目录
Zend Optimizer的安装向导会自动根据你的选择来修改 php.ini帮助你启动这个引擎。下面简单介绍一下 Zend Optimizer的配置选项。以下为本人安装完成后 php.ini里的默认配置代码(分号后面的内容为注释):
zend_extension_ts="D:\php\Zend\lib\ZendExtensionManager.dll"
;Zend Optimizer模块在硬盘上的安装路径。
zend_extension_manager.optimizer_ts="D:\php\Zend\lib\Optimizer-2.6.2"
;优化器所在目录,默认无须修改。
zend_optimizer.optimization_level=1023
;优化程度,这里定义启动多少个优化过程,默认值是 15,表示同时开启 10个优化过程中的 1-4,我们可以将这个值改为 1023,表示开启全部10个优化过程。
调用phpinfo()函数后显示:
Zend Engine v1.3.0, Copyright(c) 1998-2004 Zend Technologies with Zend Extension Manager v1.0.9, Copyright(c) 2003-2006, by Zend Technologies with Zend Optimizer v2.6.2, Copyright(c) 1998-2006, by Zend Technologies则表示安装成功。
如何通过Web Services上传和下载文件
随着Internet技术的发展和跨平台需求的日益增加 Web Services的应用越来越广我们不但需要通过Web Services传递字符串信息而且需要传递二进制文件信息下面我们就分别介绍如何通过Web Services从服务器下载文件到客户端和从客户端通过Web Services上载文件到服务器
一通过Web Services显示和下载文件
我们这里建立的Web Services的名称为GetBinaryFile提供两个公共方法分别是GetImage()和GetImageType()前者返回二进制文件字节数组后者返回文件类型其中 GetImage()方法有一个参数用来在客户端选择要显示或下载的文件名字这里我们所显示和下载的文件可以不在虚拟目录下采用这个方法的好处是可以根据权限对文件进行显示和下载控制从下面的方法我们可以看出实际的文件位置并没有在虚拟目录下因此可以更好地对文件进行权限控制这在对安全性有比较高的情况下特别有用这个功能在以前的ASP程序中可以用Stream对象实现为了方便读者进行测试这里列出了全部的源代码并在源代码里进行介绍和注释
首先建立GetBinaryFile a*** x文件
我们可以在VS NET里新建一个C#的aspxWebCS工程然后添加新项选择 Web服务并设定文件名为 GetBinaryFile a*** x在查看代码中输入以下代码即 GetBinaryFile a*** x cs
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Diagnostics;
using System Web;
using System Web UI;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// GetBinaryFile的摘要说明
/// Web Services名称 GetBinaryFile
///功能返回服务器上的一个文件对象的二进制字节数组
///
[WebService(Namespace=
Description=在Web Services里利用 NET框架进行传递二进制文件)]
public class GetBinaryFile: System Web Services WebService
{
#region Component Designer generated code
//Web服务设计器所必需的
private IContainer ponents= null;
///
///清理所有正在使用的资源
///
protected override void Dispose( bool disposing)
{
if(disposing&&ponents!= null)
{
ponents Dispose();
}
base Dispose(disposing);
}
#endregion
public class Images: System Web Services WebService
{
///
/// Web服务提供的方法返回给定文件的字节数组
///
[WebMethod(Description= Web服务提供的方法返回给定文件的字节数组)]
public byte[] GetImage(string requestFileName)
{
///得到服务器端的一个图片
///如果你自己测试注意修改下面的实际物理路径
if(requestFileName== null|| requestFileName==)
return getBinaryFile( D:\Picture JPG);
else
return getBinaryFile( D:\+ requestFileName);
}
///
/// getBinaryFile返回所给文件路径的字节数组
///
///
public byte[] getBinaryFile(string filename)
{
if(File Exists(filename))
{
try
{
///打开现有文件以进行读取
FileStream s= File OpenRead(filename);
return ConvertStreamToByteBuffer(s);
}
catch(Exception e)
{
return new byte[ ];
}
}
else
{
return new byte[ ];
}
}
///
/// ConvertStreamToByteBuffer把给定的文件流转换为二进制字节数组
///
///
public byte[] ConvertStreamToByteBuffer(System IO Stream theStream)
{
int b;
System IO MemoryStream tempStream= new System IO MemoryStream();
while((b=theStream ReadByte())!=)
{
tempStream WriteByte(((byte)b));
}
return tempStream ToArray();
}
[WebMethod(Description= Web服务提供的方法返回给定文件类型)]
public string GetImageType()
{
///这里只是测试您可以根据实际的文件类型进行动态输出
return image/jpg;
}
}
}
}
观看地址进入讨论组讨论
一旦我们创建了上面的a*** x文件进行编译后我们就可以编写客户端的代码来进行调用这个Web Services了
我们先添加Web引用输入下面我们编写显示文件的中间文件 GetBinaryFileShow aspx这里我们只需要在后代码里编写代码即可 GetBinaryFileShow aspx cs文件内容如下
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Drawing;
using System Web;
using System Web SessionState;
using System Web UI;
using System Web UI WebControls;
using System Web UI HtmlControls;
using System Web Services;
namespace aspxWebCS
{
///
/// GetBinaryFileShow的摘要说明
///
public class GetBinaryFileShow: System Web UI Page
{
private void Page_Load(object sender System EventArgs e)
{
//在此处放置用户代码以初始化页面
///定义并初始化文件对象
aspxWebCS GetBinaryFile Images oImage;
oImage= new aspxWebCS GetBinaryFile Images();
///得到二进制文件字节数组
byte[] image= oImage GetImage();
///转换为支持存储区为内存的流
System IO MemoryStream memStream= new System IO MemoryStream(image);
///定义并实例化Bitmap对象
Bitmap bm= new Bitmap(memStream);
///根据不同的条件进行输出或者下载
Response Clear();
///如果请求字符串指定下载就下载该文件
///否则就显示在浏览器中
if(Request QueryString[ Download ]==)
{
Response Buffer= true;
Response ContentType= application/octet stream;
///这里下载输出的文件名字 ok jpg为例子你实际中可以根据情况动态决定
Response AddHeader( Content Disposition attachment;filename=ok jpg);
}
else
Response ContentType= oImage GetImageType();
Response BinaryWrite(image);
Response End();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN该调用是 ASP NEeb窗体设计器所必需的
//
InitializeComponent();
base OnInit(e);
}
///
///设计器支持所需的方法不要使用代码编辑器修改
///此方法的内容
///
private void InitializeComponent()
{
this Load+= new System EventHandler(this Page_Load);
}
#endregion
}
}
最后我们就编写最终的浏览页面 GetBinaryFile aspx这个文件很简单只需要aspx文件即可内容如下
<%@ Page language="c#" Codebehind="GetBinaryFile.aspx.cs" AutoEventWireup="false"
Inherits="aspxWebCS.GetBinaryFile"%>Inherits= aspxWebCS GetBinaryFile%>
runat= server>runat= server>下载文件
收藏地址:进入讨论组讨论
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Diagnostics;
using System Web;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// Upload的摘要说明
///
[WebService(Namespace=
Description=在Web Services里利用 NET框架进上载文件)]
public class Upload: System Web Services WebService
{
public Upload()
{
//CODEGEN该调用是 ASP NEeb服务设计器所必需的
InitializeComponent();
}
#region Component Designer generated code
//Web服务设计器所必需的
private IContainer ponents= null;
///
///设计器支持所需的方法不要使用代码编辑器修改
///此方法的内容
///
private void InitializeComponent()
{
}
///
///清理所有正在使用的资源
///
protected override void Dispose( bool disposing)
{
if(disposing&&ponents!= null)
{
ponents Dispose();
}
base Dispose(disposing);
}
#endregion
[WebMethod(Description= Web服务提供的方法返回是否文件上载成功与否)]
public string UploadFile(byte[] fs string FileName)
{
try
{
///定义并实例化一个内存流以存放提交上来的字节数组
MemoryStream m= new MemoryStream(fs);
///定义实际文件对象保存上载的文件
FileStream f= new FileStream(Server MapPath()+ \
+ FileName FileMode Create);
///把内内存里的数据写入物理文件
m WriteTo(f);
m Close();
f Close();
f= null;
m= null;
return文件已经上传成功;
}
catch(Exception ex)
{
return ex Message;
}
}
}
}
using System;
using System Collections;
using System ComponentModel;
using System Data;
using System Drawing;
using System Web;
using System Web SessionState;
using System Web UI;
using System Web UI WebControls;
using System Web UI HtmlControls;
using System Web Services;
using System IO;
namespace aspxWebCS
{
///
/// Upload的摘要说明
///利用该方法通过Web Services上载文件
///
public class Upload: System Web UI Page
{
protected System Web UI HtmlControls HtmlInputFile MyFile;
protected System Web UI WebControls Button Button;
private void Page_Load(object sender System EventArgs e)
{
//在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN该调用是 ASP NEeb窗体设计器所必需的
//
InitializeComponent();
base OnInit(e);
}
///
///设计器支持所需的方法不要使用代码编辑器修改
///此方法的内容
///
private void InitializeComponent()
{
this Button Click+= new System EventHandler(this Button _Click);
this Load+= new System EventHandler(this Page_Load);
}
#endregion
private void Button _Click(object sender System EventArgs e)
{
///首先得到上载文件信息和文件流
if(MyFile PostedFile!= null)
{
System Web HttpFileCollection oFiles;
oFiles= System Web HttpContext Current Request Files;
if(oFiles Count<)
{
Response Write(请选择文件);
Response End();
}
string FilePath= oFiles[ ] FileName;
if(FilePath==|| FilePath== null)
{
Response Write(请选择一个文件);
Response End();
}
string FileName= FilePath Substring(FilePath LastIndexOf( \)+);
try
{
///处理上载的文件流信息
byte[] b= new byte[oFiles[ ] ContentLength];
System IO Stream fs;
aspxWebCS Upload o;
o= new aspxWebCS Upload();
fs=(System IO Stream)oFiles[ ] InputStream;
fs Read(b oFiles[ ] ContentLength);
///调用Web Services的UploadFile方法进行上载文件
Response Write(o UploadFile(b FileName));
fs Close();
}
catch(Exception ex)
{
Response Write(ex Message);
}
}
else
{
Response Write(请选择文件);
}
}
}
}
最后需要注意的是在保存文件时您应该确保指定文件的完整路径(例如 C:MyFilesPicture jpg)并确保为 ASP NET使用的帐户提供要存储文件的目录的写权限上载大文件时可使用元素的 maxRequestLength属性来增加文件大小的最大允许值其中 maxRequestLength指示 ASP NET支持的HTTP方式上载的最大字节数该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击指定的大小以 KB为单位默认值为 KB( MB) executionTimeout指示在被 ASP NET自动关闭前允许执行请求的最大秒数在当文件超出指定的大小时如果浏览器中会产生 DNS错误或者出现服务不可得到的情况也请修改以上的配置把配置数加大
另外上载大文件时还可能会收到以下错误信息
aspnet_wp exe(PID:)被回收因为内存消耗超过了 MB(可用 RAM的百分之)
如果遇到此错误信息请增加应用程序的 nfig文件的元素中 memoryLimit属性的值
lishixinzhi/Article/program/net/201311/12410
好了,关于asp图片上传源码下载和asp商业源码的问题到这里结束啦,希望可以解决您的问题哈!