从httppostedfile转换为htmlinputfile

时间:2012-01-02 20:51:29

标签: asp.net .net vb.net

如何将httppostedfile转换为htmlinputfile?我正在处理一个旧应用程序的混乱,到目前为止已经能够重构它所以它有点意义,但这个特殊的混乱太纠结,不值得努力:S。

像往常一样,谢谢你的帮助

相关代码:

系列:

Imports System.IO
Imports System.Web.UI.HtmlControls
Public Class ArchivosCollection
    Inherits CollectionBase

    Default Public Property Item(ByVal index As Integer) As HtmlInputFile
        Get
            Return MyBase.List(index)
        End Get
        Set(ByVal Value As HtmlInputFile)
            MyBase.List(index) = Value
        End Set
    End Property

    Public Function Add(ByVal oArchivo As HtmlInputFile) As Integer
        Return MyBase.List.Add(oArchivo)
    End Function

    Public Function getDataSource() As DataTable
        Dim dt As New DataTable
        Dim oArchivo As HtmlInputFile
        Dim fila As DataRow
        Dim orden As Integer = 0
        dt.Columns.Add("documento", GetType(System.String))
        dt.Columns.Add("tipo", GetType(System.String))
        For Each oArchivo In list
            If Not oArchivo.Disabled Then
                fila = dt.NewRow()
                fila("documento") = Trim(Path.GetFileName(oArchivo.PostedFile.FileName))
                fila("tipo") = Trim(oArchivo.PostedFile.ContentType)
                dt.Rows.Add(fila)
            End If
        Next
        Return dt
    End Function

    Public Function ExisteArchivo(ByVal Nombre As String) As Boolean
        For Each oArchivo As HtmlInputFile In list
            If Not oArchivo.Disabled Then
                If Path.GetFileName(oArchivo.PostedFile.FileName) = Nombre Then
                    Return True
                End If
            End If
        Next
        Return False
    End Function

    Public Function EliminarArchivo(ByVal Nombre As String) As Boolean
        For Each oArchivo As HtmlInputFile In list
            If Not oArchivo.Disabled Then
                If Path.GetFileName(oArchivo.PostedFile.FileName) = Nombre Then
                    oArchivo.Disabled = True
                    Return True
                End If
            End If
        Next
    End Function
End Class

旧代码:

Private Sub btnAgregarDocumento_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregarDocumento.Click
    Try
        If Not (Me.fleDocumento.PostedFile Is Nothing) Then
            If Trim(Me.fleDocumento.PostedFile.FileName) = "" Then
                Throw New Exception(rm.GetString("errorDebeEscogerUnArchivo"))
            End If
            If Not Servicios.isValidUploadType(Me.fleDocumento.PostedFile.FileName, ConfigurationManager.AppSettings("Filtros Upload")) Then
                Throw New Exception(rm.GetString("errorExtensionNovalida"))
            End If
            Dim oArchivosOT As ArchivosCollection
            If Session("oArchivosOT") Is Nothing Then
                oArchivosOT = New ArchivosCollection
            Else
                oArchivosOT = Session("oArchivosOT")
            End If
            If oArchivosOT.ExisteArchivo(Path.GetFileName(Me.fleDocumento.PostedFile.FileName)) Then
                Throw New Exception(rm.GetString("errorArchivoYaExiste"))
            End If
            oArchivosOT.Add(Me.fleDocumento)
            Me.dgDocumentos.DataSource = oArchivosOT.getDataSource()
            Me.dgDocumentos.DataBind()
            Session("oArchivosOT") = oArchivosOT
            If Request.QueryString("desde") = "proy" Then
                ClientScript.RegisterStartupScript(Page.GetType, "msg", "<script>window.opener.document.Form1.refGridDocs.click();</script>")
            End If
        Else
            Throw New Exception(rm.GetString("errorDebeEscogerUnArchivo"))
        End If
    Catch exc As Exception
        ClientScript.RegisterStartupScript(Page.GetType, "msg", Servicios.MsgBox(exc.Message))
    End Try
End Sub

新代码(部分):

Dim archivos As HttpFileCollection = Request.Files
            Dim colArchivos As ArchivosCollection = IIf(Session("oArchivosOT") Is Nothing, New ArchivosCollection(), Session("oArchivosOT"))
            Dim i
            For i = 0 To archivos.Count
                colArchivos.Add(DirectCast(archivos(i), HtmlInputFile))
            Next

            Session("oArchivosOT") = colArchivos

1 个答案:

答案 0 :(得分:3)

HtmlInputFile对象的PostedFile属性是HttpPostedFile对象 - 您只需为每个HtmlInputFile访问它。