asp.net 2.0 asp:FIleUpload控件将上传的文件保存到其他服务器

时间:2011-02-23 15:37:57

标签: asp.net file-upload

我尝试使用asp:FileUpload Control允许用户将文件(.doc,.gif,.xls,.jpg)上传到我们DMZ之外的服务器而不是Web服务器。我们希望能够在将这些文件保存到另一个允许访问外部用户的目录之前查看这些文件中的病毒,结构等。从我读到的有关此控件的内容是,它将允许将文件上载到Web服务器。可以使用此控件将文件上载到Web服务器以外的服务器吗?如果可以在哪里找到这种类型的功能,或者如何强制它转到https:\ servername \文件夹名称(服务器名称不是Web服务器)?我是否必须读取文件然后将其写入其他服务器?

谢谢, 埃林

3 个答案:

答案 0 :(得分:1)

FileUoload控件只能将数据上传到Web服务器。如果需要将文件保存到其他服务器,则需要处理POST请求,从Fileupload控件读取数据并将其保存到UNC共享。

答案 1 :(得分:0)

据我所知,使用fileupload控件实际上将内容上传到webserver,在请求时将内容呈现给客户端(页面);我不认为你可以将文件上传到除w​​ebserver之外的其他服务器;这不应该发生。如果需要,请查看以下URL的fileupload

http://msdn.microsoft.com/en-us/library/aa479405.aspx

http://www.asp.net/data-access/tutorials/uploading-files-cs

感谢。

答案 2 :(得分:0)

这取决于您的Web服务器设置和授予应用程序的权限。如果它是DMZ,那么我会假设授予应用程序非常小的权限。在这种情况下,应用程序将无法访问除Web服务器之外的任何资源,除非为运行应用程序的帐户授予显式权限以访问网络资源(不建议这样做)。但是,如果您尝试保存文件的nework服务器启用了ftp,那么您可以使用经过身份验证的具有必要权限的ftp帐户将文件上载控制中流式传输的字节写入网络服务器。

您可以使用以下功能:

Imports System.Net
Imports System.IO

    Public Function Upload(ByVal FileByte() As Byte, ByVal FileName As String, ByVal ftpUserID As String, ByVal ftpPassword As String, ByVal ftpURL As String) As Boolean

        Dim retValue As Boolean = False

        Try
            Dim ftpFullPath As String = ftpURL + "/" + FileName
            Dim ftp As FtpWebRequest = FtpWebRequest.Create(New Uri(ftpFullPath))
            ftp.Credentials = New NetworkCredential(ftpUserID, ftpPassword)
            ftp.KeepAlive = True
            ftp.UseBinary = True
            ftp.Method = WebRequestMethods.Ftp.UploadFile
            Dim ftpStream As Stream = ftp.GetRequestStream()
            ftpStream.Write(FileByte, 0, FileByte.Length)
            ftpStream.Close()
            ftpStream.Dispose()
            retValue = True
        Catch ex As Exception
            Throw ex
        End Try
        Return retValue
    End Function

功能调用:

Upload(FileUploadControl.FileBytes, "filename.ext" "user", "password", "ftppath")