• Lunes 23 de Diciembre de 2024, 08:00

Autor Tema:  Control FileUpload  (Leído 7977 veces)

elgaiti

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Control FileUpload
« en: Jueves 20 de Noviembre de 2008, 19:49 »
0
Buenas a todos.

Estoy desarrollando una aplicacion en vb.net.
Necesito que los usuarios puedan "subir" a la aplicación, planillas excel, desde sus propios discos rígidos.
Luego son pasados a sql, procesados y termino emitiendo un informe con ReportServices.

Para que los usuarios puedan "subir" sus archivos, coloqué un FileUpload, que va a buscar en el disco local.
No estoy pudiendo hacer que corriendo la aplicación desde un servidor, el sistema pueda leer el archivo y desarrollar las funciones.
En ningún momento el archivo debe estar copiado en el servidor.

Espero que se entienda y que me puedan ayudar.

Saludos.  Damián.

carlosespinoza

  • Miembro activo
  • **
  • Mensajes: 53
  • Nacionalidad: mx
    • Ver Perfil
    • http://carlostusa.spaces.live.com/
Re: Control FileUpload
« Respuesta #1 en: Miércoles 26 de Noviembre de 2008, 20:33 »
0
hola, si lo que quieres es procesar la información del archivo de excel... puedes hacer que el usuario seleccione el archivo y tu volcar toda la información a un datagrid y de ahi manipularlo como tu necesites...

Yo necesitaba que el archivo que me manda el banco en excel, meter los depositos y disposiciones en la BD, entonces asi lo hise:

Código: Text
  1.  
  2. 'pedir al usuario que seleccione el archivo, openFD= Control OpenFileDialog
  3. Dim archivo As String
  4.         With openFD
  5.             .Title = "Seleccionar archivo de Exportación"
  6.             .Filter = "Archivos de exportación Bancomer (*.xls)|*.xls"
  7.             .Multiselect = False
  8.             .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
  9.             If .ShowDialog = Windows.Forms.DialogResult.OK Then
  10.                 archivo = .FileName
  11.             Else
  12.                 Exit Sub
  13.             End If
  14.         End With
  15.         'cargarlo en la datagrid
  16.         Try
  17.             Dim strconn As String, dt As New DataTable
  18.             strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & archivo & ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'"
  19.             Dim mconn As New OleDbConnection(strconn)
  20.             Dim ad As New OleDbDataAdapter("Select * from [hoja1$]", mconn)
  21.             mconn.Open()
  22.             ad.Fill(dt)
  23.             mconn.Close()
  24.             Me.dgvExcel.DataSource = dt
  25.         Catch ex As OleDbException
  26.             MessageBox.Show(ex.Message)
  27.         End Try
  28.  
  29.  

Espero que te sirva...
Saludos :good:

elgaiti

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Control FileUpload
« Respuesta #2 en: Jueves 27 de Noviembre de 2008, 12:25 »
0
Muchas gracias...

Eso es lo que estoy haciendo.
El problema lo tengo con la "subida" del archivo.
Si ejecuto el programa desde mi pc, todo funciona perfecto, pero si publico la aplicacion e ingreso mediante IE, el sistema, en lugar de tomar como origen del archivo de excel el "C:etc..." de mi pc, está buscando el "C:etc..." del servidor...

Espero que me haya explicado bien.
Copio el código que estoy utilizando.

Gracias.

Código: Text
  1.  
  2.     Sub CargarPersonal(ByVal sHoja As String)
  3.  
  4.         SQL = "Delete Calculo_Detalle"
  5.         Acceso.ExecuteNonQuery(SQL)
  6.  
  7.         SQL = "Delete Calculo_Cabecera"
  8.         Acceso.ExecuteNonQuery(SQL)
  9.  
  10.         SQL = "Delete from Empleados"
  11.         Acceso.ExecuteNonQuery(SQL)
  12.  
  13.         If FileUploadPersonal.Visible = True Then
  14.             If FileUploadPersonal.PostedFile.FileName = "" Then
  15.                 Exit Sub
  16.             Else
  17.                 Archivo = FileUploadPersonal.PostedFile.FileName
  18.             End If
  19.         Else
  20.             Archivo = LblUbicacionPersonal.Text
  21.         End If
  22.  
  23.         If Not System.IO.File.Exists(Archivo) Then
  24.             'MsgBox("No se encontró el Libro: " & _
  25.             '        SLibro, MsgBoxStyle.Critical, _
  26.             '        "Ruta inválida")
  27.             Exit Sub
  28.         End If
  29.  
  30.  
  31.  
  32.         SQLImportar = "Select * From [" & sHoja & "$]"
  33.         Datos = Acceso.Importar(SQLImportar, Archivo)
  34.  
  35.         Dim x As Integer
  36.         x = Datos.Rows.Count
  37.  
  38.         ' Dim I As Integer
  39.  
  40.         For I = 1 To x - 1
  41.  
  42.             Dim SQL As String
  43.  
  44.             V_Cuil = Datos.Rows(I)(0)
  45.             V_Legajo = Datos.Rows(I)(1)
  46.             V_Apellido = Datos.Rows(I)(2)
  47.             V_Nombre = Datos.Rows(I)(3)
  48.  
  49.  
  50.             SQL = " insert into Empleados" & _
  51.                   " (Cuil,Legajo, Apellido,  Nombres)" & _
  52.                   " Values (" & V_Cuil & ",'" & V_Legajo & "','" & V_Apellido & "','" & V_Nombre & "')"
  53.  
  54.             Acceso.ExecuteNonQuery(SQL)
  55.  
  56.         Next I
  57.  
  58.  

carlosespinoza

  • Miembro activo
  • **
  • Mensajes: 53
  • Nacionalidad: mx
    • Ver Perfil
    • http://carlostusa.spaces.live.com/
Re: Control FileUpload
« Respuesta #3 en: Jueves 27 de Noviembre de 2008, 16:01 »
0
Ok, ya te entendi correctamente...

Mira si no estoy mal, lo que pasa es que la cuenta ASP.Net del servidor no tiene permisos de escritura en tus carpetas del servidor...

en la carpeta da clic en propiedades/permisos y agrega al usuario ASP.Net y dale permisos de escritura, con eso ya puedes copiar archivos al servidor desde el IE, debe de ser eso. porque yo queria subir fotos de usuarios y eso me pasaba, me decia error, pero le di los permisos y todo arreglado...

Te recomiendo que crees una carpeta dentro de las carpetas del sistema para guardar tus archivos y no directamente en c:... eso te permitira tener mas control sobre los archivos que suben y tambien evitas que otro administrador borre los archivos pensando que alguien mas los subio...

Saludos :good:

carlosespinoza

  • Miembro activo
  • **
  • Mensajes: 53
  • Nacionalidad: mx
    • Ver Perfil
    • http://carlostusa.spaces.live.com/
Re: Control FileUpload
« Respuesta #4 en: Jueves 27 de Noviembre de 2008, 16:07 »
0
Te dejo el codigo que uso, posiblemente te sirva:
Código: Text
  1.  
  2.         Dim path As String = Server.MapPath("~/" & tipos.SelectedItem.Value & "/")
  3.         Dim fileOK As Boolean = False
  4.         If FileUpload1.HasFile Then
  5.             Dim fileExtension As String
  6.             fileExtension = System.IO.Path. _
  7.                 GetExtension(FileUpload1.FileName).ToLower()
  8.             Dim allowedExtensions As String() = _
  9.                 {".jpg"}
  10.             For i As Integer = 0 To allowedExtensions.Length - 1
  11.                 If fileExtension = allowedExtensions(i) Then
  12.                     fileOK = True
  13.                 End If
  14.             Next
  15.             If fileOK Then
  16.                 Try
  17.                     FileUpload1.PostedFile.SaveAs(path & _
  18.                          FileUpload1.FileName)
  19.                     Label1.Text = "Archivo Cargado!"
  20.                 Catch ex As Exception
  21.                     Label1.Text = "El Archivo no puede ser cargado."
  22.                 End Try
  23.             Else
  24.                 Label1.Text = "No se acepta este tipo de archivo; Solo se acepta .jpg"
  25.             End If
  26.         End If
  27.  
  28.  

Saludos

elgaiti

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Control FileUpload
« Respuesta #5 en: Viernes 28 de Noviembre de 2008, 14:20 »
0
Muchas gracias por la respuesta.

Te cuento que ahora lo estoy pudiendo hacer, pero me pide que el archivo de origen excel, esté en el servidor.
Yo le asigno como path c:Datosarchivo.xls, pero el sistema está buscando esa ruta en el servidor, mientras que la tiene que tomar de la pc cliente.

No entiendo como solucionar esto!

elgaiti

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Control FileUpload
« Respuesta #6 en: Viernes 28 de Noviembre de 2008, 14:45 »
0
Perdón...

No se si me expliqué bien antes, por eso vuelvo a escribir...esto me está poniendo de los pelos!!!

1.- El usuario debe, mediante un fileupload, seleccionar de SU disco local, un archivo excel. (actualmente, el fileupload con el examinar busca ok en SU disco local).
2.- Copio el archivo a una carpeta del servidor.
3.- Importo el archivo de excel a una bbdd de sql.
4.- Realizo cálculos y muestro reportes.

Problema:

El problema lo estoy teniendo con el fileupload, ya que si queda como ruta "C:datosarchivo.xls", la aplicación, busca la ruta "C:datosarchivo.xls", en el servidor, y obviamente no lo encuentra...

Ayuda!

Gracias.

carlosespinoza

  • Miembro activo
  • **
  • Mensajes: 53
  • Nacionalidad: mx
    • Ver Perfil
    • http://carlostusa.spaces.live.com/
Re: Control FileUpload
« Respuesta #7 en: Viernes 28 de Noviembre de 2008, 16:00 »
0
Por eso  :huh: ... realmente no se que es lo que no entiendes...
el metodo server.mappath te da la dirección donde esta tu aplicación, la ~ es como un comodin para refrerirte a toda la direccion, el control fileupload te permite dirigir donde quieres guardar el archivo:

Código: Text
  1.  
  2. Dim path As String = Server.MapPath("~/archivos/")
  3. ...
  4. FileUpload1.PostedFile.SaveAs(path & FileUpload1.FileName)
  5.  
  6.  
entonces cuando abras el archivo (ya previamente guardado) tienes que abrirlo con ese path... ejemplo:
Código: Text
  1.  
  2. dim archivo as string= path & FileUpload1.FileName
  3.  
  4.  
al usarlo asi, generas una ruta y carpeta especifica para el archivo...

Realmente no veo lo complicado a esto...
Saludos y espero que con esto ya quede... :good:

si de plano no se puede, contactame por messenger: espinoza_vfp@hotmail.com  :comp:

leipunk

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Control FileUpload
« Respuesta #8 en: Sábado 13 de Diciembre de 2008, 19:02 »
0
que tal!!

Lo que debes hacer para poder leer tu archivo xls en asp.net es lo siguiente:

- Tener una carpeta en el IIS, con permiso de lectura escritura. Eso para poder subir tus archivos al servidor. Aunque no quieras debes subir los archivos xls al servidor, para que puedas tener acceso a ellos, ya que no puedes tener acceso al equipo cliente, por razones obvias de seguridad.
- Una vez que cargas el archivo xls a tu servidor, no tienes mas que abrirlo leerlo y cargar los datos que necesitas con el cogio ya expuesto.

- Enresumidas cuentas el unico problema que tenias es el de permisos, en el equipo de desarrollo local no tienes problemas ya que estas en el mismo espacio de trabajo, pero cuando cambias a un entorno de produccion es distinto.

Espero poder haberte ayudado.