Visual Studio .NET 2002.NET 1.0Windows 2000Windows XP中级开发Visual StudioWindows.NETVisual BasicASP.NET
文件服务器 - Web 服务






4.67/5 (31投票s)
2003年2月23日
2分钟阅读

322087

7198
使用 Web 服务在 Web 服务器上获取和放置文件
引言
本文档展示了如何使用 Web 服务创建一个服务,通过 HTTP 协议管理(上传和下载)Web 服务器上的文件。
如果您无法物理访问 Web 服务器,或者只是为了共享您的 Web 服务器内容,例如图片或文件,那么这个 Web 服务将非常有用且快速。
代码
那么,让我们停止讨论并开始编写代码吧 : )
首先我们需要导入额外的类
Imports System.Web.Services
Imports System.Configuration
Imports System.IO
一个基本的文件扩展名枚举器
Public Enum FileExtensions
htm
html
asp
aspx
jpg
gif
dll
exe
all
End Enum
类 FileInformation
将被填充每个文件的信息。
Public Class FileInformation
Public Name As String
Public Size As Long
Public CreadedDate As DateTime
Public LastModified As DateTime
Public LastAccess As DateTime
Public FileType As String
Public FileLocation As String
Public FileContent As Byte()
End Class
WebMethod
Browse
将返回一个 FileInformation
类的数组
<!--<WebMethod(Description:="Retrieve an array of files
with name, attributes and content.")> _-->
Public Function Browse(ByVal VirtualPath As String, ByVal FileExtension _
As FileExtensions) As FileInformation()
Dim i As Integer
Dim fi As FileInfo
Dim aFiles As FileInformation()
Dim mExtension As String
Select Case FileExtension
Case FileExtensions.asp
mExtension = "asp"
Case FileExtensions.aspx
mExtension = "aspx"
Case FileExtensions.gif
mExtension = "gif"
Case FileExtensions.htm
mExtension = "htm"
Case FileExtensions.html
mExtension = "html"
Case FileExtensions.jpg
mExtension = "jpg"
Case FileExtensions.dll
mExtension = "dll"
Case FileExtensions.exe
mExtension = "exe"
Case FileExtensions.all
mExtension = "*"
End Select
Dim di As New DirectoryInfo(WebServerPath & VirtualPath)
Dim afi As FileInfo() = _
di.GetFiles("*." & mExtension)
ReDim Preserve aFiles(afi.Length - 1)
For Each fi In afi
aFiles(i) = New FileInformation()
aFiles(i).Name = fi.Name
aFiles(i).Size = fi.Length
aFiles(i).LastAccess = fi.LastAccessTime
aFiles(i).CreadedDate = fi.CreationTime
aFiles(i).LastModified = fi.LastWriteTime
aFiles(i).FileType = fi.Extension
aFiles(i).FileLocation = fi.DirectoryName
aFiles(i).FileContent = ReadFile(WebServerPath & _
VirtualPath & "\" & fi.Name)
i += 1
Next
Return aFiles
End Function
Private Shared
方法 ReadFile
返回一个 byte()
包含文件内容
Private Shared Function ReadFile(ByVal FilePath As String) As Byte()
Dim fs As FileStream
Try
' Read file and return contents
fs = File.Open(FilePath, FileMode.Open, FileAccess.Read)
Dim lngLen As Long = fs.Length
Dim abytBuffer(CInt(lngLen - 1)) As Byte
fs.Read(abytBuffer, 0, CInt(lngLen))
Return abytBuffer
Catch exp As Exception
Return Nothing
Finally
If Not fs Is Nothing Then
fs.Close()
End If
End Try
End Function
UploadFile
WebMethod
用于将单个文件发送到 Web 服务器
<!--<WebMethod(Description:="Upload a single file to
web server.")> _-->
Public Function UploadFile(ByVal VirtualPath As String, _
ByVal Name As String, ByVal Content As Byte()) As Boolean
Dim objFile As File, objStream As StreamWriter, _
objFstream As FileStream
Try
objFstream = File.Open(WebServerPath & VirtualPath & "\" & _
Name, FileMode.Create, FileAccess.Write)
Dim lngLen As Long = Content.Length
objFstream.Write(Content, 0, CInt(lngLen))
objFstream.Flush()
objFstream.Close()
Return True
Catch exc As System.UnauthorizedAccessException
Return False
Catch exc As Exception
Return False
Finally
If Not objFstream Is Nothing Then
objFstream.Close()
End If
End Try
End Function
WSFileServer
还有另外两个有用的方法,名为 DirectoryExists
和 FileExists
。
使用代码
有一个简单的控制台应用程序来检索文件列表。首先创建一个新的控制台应用程序项目,并添加一个 Web 引用
现在添加一个导入 System.IO
类,我们需要它来保存文件方法。
Imports System.IO
添加一些私有变量
Private mWSFileServer As WSFileServer.FileServer
Private mFileInformation() As WSFileServer.FileInformation
Private mBar As New String("-", 50)
Public Const SaveFilePath As String = "C:\Temp\"
现在我们将创建一个方法来保存文件内容,接收文件名和文件内容
Public Function SaveFile(ByVal Name As String, _
ByVal Content As Byte()) As Boolean
Dim objFstream As FileStream
Try
objFstream = File.Open(SaveFilePath & Name, _
FileMode.Create, FileAccess.Write)
Dim lngLen As Long = Content.Length
objFstream.Write(Content, 0, CInt(lngLen))
objFstream.Flush()
Return True
Catch exp As Exception
Return False
Finally
objFstream.Close()
End Try
End Function
Sub
Main
方法将初始化文件服务器 Web 服务,并显示每个文件的指定 Web 服务器虚拟路径
Sub Main()
Try
mWSFileServer = New WSFileServer.FileServer()
mFileInformation = mWSFileServer.Browse("/ProgramGuide", _
WSFileServer.FileExtensions.aspx)
Dim i As Integer
For i = 0 To mFileInformation.Length - 1
With mFileInformation(i)
Console.WriteLine(mBar.ToString())
Console.WriteLine("File: {0}", .Name)
Console.WriteLine("Size: {0}", .Size)
Console.WriteLine("Location: {0}", .FileLocation)
Console.WriteLine("LastModified: {0}", .LastModified)
Console.WriteLine("CreateDate: {0}", .CreadedDate)
Console.WriteLine("LastAccess: {0}", .LastAccess)
If SaveFile(.Name, .FileContent) Then
Console.WriteLine("File saved sucessfull at:{0}", _
SaveFilePath & .Name)
Else
Console.WriteLine("Save file failure!")
End If
End With
Next
Console.WriteLine(mBar.ToString())
Console.Read()
Catch exp As Exception
Console.WriteLine(mBar)
Finally
mWSFileServer.Dispose()
End Try
End Sub
Web 服务调用的结果可以在以下屏幕中看到
控制台应用程序调用 Web 服务的 Browser
方法,显示所有文件信息并保存它们。
关注点
我认为在使用 Web 服务技术时,您的应用程序没有限制,您只需要发挥创意 ;-)
历史
- 2003年2月18日 - 首次发布。