CLR: .Net / Mono / Boo / Otros CLR > VB .NET
Control FileUpload
elgaiti:
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:
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 --- 'pedir al usuario que seleccione el archivo, openFD= Control OpenFileDialogDim archivo As String With openFD .Title = "Seleccionar archivo de Exportación" .Filter = "Archivos de exportación Bancomer (*.xls)|*.xls" .Multiselect = False .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments If .ShowDialog = Windows.Forms.DialogResult.OK Then archivo = .FileName Else Exit Sub End If End With 'cargarlo en la datagrid Try Dim strconn As String, dt As New DataTable strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & archivo & ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1'" Dim mconn As New OleDbConnection(strconn) Dim ad As New OleDbDataAdapter("Select * from [hoja1$]", mconn) mconn.Open() ad.Fill(dt) mconn.Close() Me.dgvExcel.DataSource = dt Catch ex As OleDbException MessageBox.Show(ex.Message) End Try
Espero que te sirva...
Saludos :good:
elgaiti:
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 --- Sub CargarPersonal(ByVal sHoja As String) SQL = "Delete Calculo_Detalle" Acceso.ExecuteNonQuery(SQL) SQL = "Delete Calculo_Cabecera" Acceso.ExecuteNonQuery(SQL) SQL = "Delete from Empleados" Acceso.ExecuteNonQuery(SQL) If FileUploadPersonal.Visible = True Then If FileUploadPersonal.PostedFile.FileName = "" Then Exit Sub Else Archivo = FileUploadPersonal.PostedFile.FileName End If Else Archivo = LblUbicacionPersonal.Text End If If Not System.IO.File.Exists(Archivo) Then 'MsgBox("No se encontró el Libro: " & _ ' SLibro, MsgBoxStyle.Critical, _ ' "Ruta inválida") Exit Sub End If SQLImportar = "Select * From [" & sHoja & "$]" Datos = Acceso.Importar(SQLImportar, Archivo) Dim x As Integer x = Datos.Rows.Count ' Dim I As Integer For I = 1 To x - 1 Dim SQL As String V_Cuil = Datos.Rows(I)(0) V_Legajo = Datos.Rows(I)(1) V_Apellido = Datos.Rows(I)(2) V_Nombre = Datos.Rows(I)(3) SQL = " insert into Empleados" & _ " (Cuil,Legajo, Apellido, Nombres)" & _ " Values (" & V_Cuil & ",'" & V_Legajo & "','" & V_Apellido & "','" & V_Nombre & "')" Acceso.ExecuteNonQuery(SQL) Next I
carlosespinoza:
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:
Te dejo el codigo que uso, posiblemente te sirva:
--- Código: Text --- Dim path As String = Server.MapPath("~/" & tipos.SelectedItem.Value & "/") Dim fileOK As Boolean = False If FileUpload1.HasFile Then Dim fileExtension As String fileExtension = System.IO.Path. _ GetExtension(FileUpload1.FileName).ToLower() Dim allowedExtensions As String() = _ {".jpg"} For i As Integer = 0 To allowedExtensions.Length - 1 If fileExtension = allowedExtensions(i) Then fileOK = True End If Next If fileOK Then Try FileUpload1.PostedFile.SaveAs(path & _ FileUpload1.FileName) Label1.Text = "Archivo Cargado!" Catch ex As Exception Label1.Text = "El Archivo no puede ser cargado." End Try Else Label1.Text = "No se acepta este tipo de archivo; Solo se acepta .jpg" End If End If
Saludos
Navegación
[#] Página Siguiente
Ir a la versión completa