none
Multiplos Anexos ASP.NET RRS feed

  • Pergunta

  • Galera é o seguinte, tenho uma tela de abertura de chamados e na tela o usuario tem a opção de anexar quantos arquivos ele quiser, porém não estou encontrando uma forma de fazer isso em asp.net, tentei fazer com DevExpess mais tem algumas restrições quanta a manipulação do componente que não deu certo. Gostaria de saber se alguém tem alguma idéia de como eu possa estar fazendo para enviar multiplos Anexos. Estou desenvolvendo em ASP.NET e VB.NET. 
    sexta-feira, 20 de dezembro de 2013 22:38

Respostas

  • Sim, eu sei que no Framework 4.5 tem essa opção, porém eu utilizo o Framework 4.0 o servidor onde a aplicação sera executada só aceita até o 4.0. Estou achando q o problema deve estar em algum PostBack na masterPage que esta fazendo com que o objeto se perca. Porque quando não utilizo a MasterPage nesta pagina o upload funciona.

    Coloque aqui assim

    Dim caminho As String = Server.MapPath("~/Anexos/")

    Eu tinha feito alteração no seu código e tava faltando isso

    outra coisa

    iFile.PostedFile.SaveAs(caminho + iFile.PostedFile.FileName)
    Faça essas duas alterações ! e me fala


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Giovani Cr terça-feira, 24 de dezembro de 2013 12:49
    domingo, 22 de dezembro de 2013 00:06
  • Deu certo! O problema estava na MasterPage, eu estava usando um UpdatePanel e em algum momento ele estava fazendo com que o objeto do Upload se perdesse. Obrigado pela Ajuda!
    • Marcado como Resposta Giovani Cr terça-feira, 24 de dezembro de 2013 12:49
    domingo, 22 de dezembro de 2013 23:39

Todas as Respostas

  • Se for em HMTL5 o file input aceita vários itens para anexar, será que só isso não resolve!!!?

    Fulvio Cezar Canducci Dias

    sábado, 21 de dezembro de 2013 17:06
  • Não resolve, Estou fazendo da seguinte maneira. Segue código abaixo.

    ASP

    <%@ Page Language="vb" MasterPageFile="~/Common/CommonMasterPage.Master" AutoEventWireup="true" CodeBehind="upload.aspx.vb" Inherits="ERnetworkSolution.Web.upload" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="cphBody" runat="server">
        <div class="lblAnexo2" style="margin-left: 243px; width: 413px;">
            <asp:FileUpload ID="uplAnexo" runat="server" />
            <asp:Button ID="btnAdicionar" runat="server" Text="Adicionar" OnClick="btnAdicionar_Click" />
            <br />
            <asp:ListBox ID="lstArquivos" runat="server" Width="300px"></asp:ListBox>
            <br />
            <asp:Button ID="Button1" runat="server" Text="Upload" />
            <asp:Button ID="btnDeletar" runat="server" Text="Deletar" OnClick="btnDeletar_Click" />
            <br />
            <asp:Label ID="lblMensagem" runat="server"></asp:Label>
        </div>
    </asp:Content>

    CodeBehind

    Imports System.IO
    
    Public Class upload
        Inherits System.Web.UI.Page
    
        'Crio uma variável do tipo ArrayList. Perceba que ela é “Estática”
        Public Shared arrArquivos As New ArrayList()
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        End Sub
    
        Protected Sub btnAdicionar_Click(sender As Object, e As EventArgs) Handles btnAdicionar.Click
            'Vamos verificar se não existe arquivo selecionado no controle FileUpload.
            If uplAnexo.HasFile Then
                'Verificamos o tamanho do arquivo em bytes. Nesse caso faço Upload de até 11MB
                If uplAnexo.PostedFile.ContentLength > 11000000 Then
                    Dim cs As ClientScriptManager = Page.ClientScript
                    cs.RegisterClientScriptBlock(Me.[GetType](), "Erro", "alert(O tamanho do arquivo é maior que o tamanho permitido!)", True)
    
                    Return
                Else
                    'Adicionamos o arquivo ao arrayList, em seguida ao ListBox.
                    arrArquivos.Add(uplAnexo)
                    lstArquivos.Items.Add(uplAnexo.PostedFile.FileName)
                End If
            End If
        End Sub
    
        Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Pegamos o caminho do diretório onde vamos salvar os Uploads
            Dim caminho As String = Server.MapPath("Anexos")
            For Each iFile As FileUpload In arrArquivos
                'Para cada Arquivo iFile em arrArquivos
                'Salvo o arquivo no diretório base, nesse caso "caminho".
                iFile.PostedFile.SaveAs(caminho + Path.GetFileName(iFile.PostedFile.FileName))
                lblMensagem.Text = "Upload de: " & lstArquivos.Items.Count.ToString() & " arquivo (s) Realizado com sucesso!"
            Next
    
            lstArquivos.Items.Clear()
            'Limpamos o ListBox
            arrArquivos.Clear()
            'Limpamos o ArrayList
        End Sub
    
        Protected Sub btnDeletar_Click(sender As Object, e As EventArgs) Handles btnDeletar.Click
            If lstArquivos.SelectedIndex > -1 Then
                'Se for selecionado algum item da lista
                arrArquivos.Remove(lstArquivos.SelectedValue)
                'Remove o item do ArrayList
                ' Remove tbm do ListBox
                lstArquivos.Items.Remove(lstArquivos.SelectedValue)
            Else
                Dim cs As ClientScriptManager = Page.ClientScript
                cs.RegisterClientScriptBlock(Me.[GetType](), "Selecionar", "alert(Selecione um arquivo na lista!)", True)
    
                Return
            End If
        End Sub
    End Class

    Quando eu utilizo MasterPage (como no código acima) o arquivo não é encontrado, e quanto eu não utilizo a MasterPage o processo ocorre normalmente e o arquivo é encontrado.

    sábado, 21 de dezembro de 2013 17:56
  • Vou colocar aqui um exemplo que com o Framework 4.5 funciona do jeito que eu te falei!

    ASPX

    <%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="upload.vb" Inherits="WebApplicationVB.WebForm1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server">
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
        <div class="lblAnexo2" style="margin-left: 243px; width: 413px;">
            <asp:FileUpload ID="uplAnexo" runat="server" ViewStateMode="Enabled" AllowMultiple="true"   />
            <asp:Button ID="btnAdicionar" runat="server" Text="Adicionar" OnClick="btnAdicionar_Click" />
            <%--<asp:Button ID="btnDeletar" runat="server" Text="Deletar" OnClientClick="return valida();" OnClick="btnDeletar_Click" />--%>
            <br />
            <asp:Label ID="lblMensagem" runat="server"></asp:Label>
        </div>    
    </asp:Content>

    .vb

    Imports System.IO
    Public Class upload
        Inherits System.Web.UI.Page
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If (Not IsPostBack) Then
    
            End If
        End Sub
        Protected Sub btnAdicionar_Click(sender As Object, e As EventArgs) Handles btnAdicionar.Click
            'Vamos verificar se não existe arquivo selecionado no controle FileUpload.
            Dim caminho As String = Server.MapPath("~/Anexos")
            If uplAnexo.HasFiles Then
                For Each upl As HttpPostedFile In uplAnexo.PostedFiles
                    'Verificamos o tamanho do arquivo em bytes. Nesse caso faço Upload de até 11MB
                    If upl.ContentLength < 11000000 Then
                        upl.SaveAs(String.Format("{0}/{1}", caminho, upl.FileName))
                    End If
                Next
            End If
            lblMensagem.Text = String.Format("Foram enviados {0}(s) arquivos ...", uplAnexo.PostedFiles.Count)
        End Sub
    End Class
    Essa seria uma forma de que ele no próprio FileUpload poderia ser adiciona vários arquivos e isso mandando diretamente para o servidor sem que tenha um processo antes ...


    Fulvio Cezar Canducci Dias

    sábado, 21 de dezembro de 2013 22:16
  • Sim, eu sei que no Framework 4.5 tem essa opção, porém eu utilizo o Framework 4.0 o servidor onde a aplicação sera executada só aceita até o 4.0. Estou achando q o problema deve estar em algum PostBack na masterPage que esta fazendo com que o objeto se perca. Porque quando não utilizo a MasterPage nesta pagina o upload funciona.
    sábado, 21 de dezembro de 2013 22:47
  • Sim, eu sei que no Framework 4.5 tem essa opção, porém eu utilizo o Framework 4.0 o servidor onde a aplicação sera executada só aceita até o 4.0. Estou achando q o problema deve estar em algum PostBack na masterPage que esta fazendo com que o objeto se perca. Porque quando não utilizo a MasterPage nesta pagina o upload funciona.

    Coloque aqui assim

    Dim caminho As String = Server.MapPath("~/Anexos/")

    Eu tinha feito alteração no seu código e tava faltando isso

    outra coisa

    iFile.PostedFile.SaveAs(caminho + iFile.PostedFile.FileName)
    Faça essas duas alterações ! e me fala


    Fulvio Cezar Canducci Dias

    • Marcado como Resposta Giovani Cr terça-feira, 24 de dezembro de 2013 12:49
    domingo, 22 de dezembro de 2013 00:06
  • Deu certo! O problema estava na MasterPage, eu estava usando um UpdatePanel e em algum momento ele estava fazendo com que o objeto do Upload se perdesse. Obrigado pela Ajuda!
    • Marcado como Resposta Giovani Cr terça-feira, 24 de dezembro de 2013 12:49
    domingo, 22 de dezembro de 2013 23:39