Subir archivos a MEGA desde Visual Basic Net --Actualizado mayo 2017--

Un saludo a todos mis seguidores de la programación vbnet, hace un tiempo acá esa un poco perdido en esto de los post, pero como Uds saben todos tenemos ocupaciones que a veces nos conllevan al descuido de otras. Pero qui me encuentro con todo el ánimo de seguir compartiendo, eso si códigos importantes que ayuden de forma significativa a los cibernautas.
Como dice el tema de este post,"Subir archivos a MEGA desde Visual Basic Net", tratar de subir archivos a mega que bien nos caería para nuestra aplicación sobre todo si quisiéramos respaldar alguna base de datos tipo access, compact, sqlite medianamente conectada y/o archivos como imágenes, videos, etc. Pues bien siguiendo en el desarrollo de este tema y siendo para mi bastante importante me encamine en buscar información relevante al tema y para los que no gustan de otro lenguaje, para vb no había o tal vez no supe buscar bien, en fin... Opte por modificar un ejemplo que ya nos venia. que Uds también pueden chequear y traducirlo de C# a nuestro lenguaje VB

Pues bien, lo primero que se debe hacer es descargar las librería de Mega que para nuestra facilidad lo podremos hacer desde nuestro propio entorno. Miren:

luego

descargamos e instalamos el paquete NuGet
Una vez instalado nos vamos al menu Administrador de paquetes NuGets

y luego buscamos mega en la caja de texto e instalamos el paquete MegaApiClient que necesitamos

y listo hasta aquí toca la parte del código:

Para el Form1

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            dialogosubir.ShowDialog()

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim xlRuta As String = ""
        Dim Open As New OpenFileDialog
        With Open
            .Title = "Seleccionar Archivo"
            .Filter = "Todos los archivos(*.*)|*.*"
            .Multiselect = False
            .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                txtruta.Text = .FileName

            End If
        End With
    End Sub
End Class

y para el dialogo de subida:

Imports System.ComponentModel
Imports System.Threading
Imports System.Windows.Forms
Imports CG.Web.MegaApiClient
Public Class dialogosubir
    'Declaración de un hilo
    Private t As Thread

    'Evento Shown que instancia y ejecuta el hilo (este evento se ejecuta después del Load).
    ' Método que se encarga de subir el archivo a la nube con la Api "Mega".
    Private Sub subir_AMega()
        Try
            ' Actualizar el label para informar al usuario.
            lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Conectando como 'correo'"))
            ' Aumentar la barra de progreso.
            ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))
            ' Instancia de un cliente para conectar con mega.
            Dim cliente As New MegaApiClient()                    'z
            ' Inicio de sesión con el cliente, pasando el correo y la contraseña de la cuenta mega a la que se sube el archivo.
            cliente.Login("micorreo.com", "mypassword")

            ' Aumentar la barra de progreso.
            ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))
            ' Actualizar el label para informar al usuario.
            lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Obteniendo directorios..."))
            ' Obtenemos los nodos (directorios/archivos) de la cuenta dentro de una variable.
            Dim nodos = cliente.GetNodes()

            ' Actualizar el label para informar al usuario.
            lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Buscando carpeta 'SUBIR_MEGA'..."))
            ' Comprobar si existe algún nodo (directorio) que se llame "SUBIR_MEGA" (en mi caso quiero subir el archivo a dicha carpeta).
            Dim existe As Boolean = cliente.GetNodes().Any(Function(n) n.Name = "SUBIR_MEGA")

            ' Crear dos nodos.
            Dim root As INode
            Dim carpeta As INode

            ' Si el directorio SUBIR_MEGA existe, se obtiene. Si no existe, se crea.
            If existe = True Then
                ' Actualizar el label para informar al usuario.
                lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Obteniendo la carpeta 'SUBIR_MEGA'...."))
                ' Aumentar la barra de progreso.
                ' ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))

                ' Obtenemos el directorio.
                carpeta = nodos.[Single](Function(n) n.Name = "SUBIR_MEGA")
            Else
                ' Actualizar label para informar al usuario.
                lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Creando carpeta 'SUBIR_MEGA'..."))
                ' Aumentar la barra de progreso.
                ' ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))

                'Obtenemos el nodo raíz.
                root = nodos.[Single](Function(n) n.Type = NodeType.Root)
                ' Creamos el directorio llamado "SUBIR_MEGA" en la raíz.
                carpeta = cliente.CreateFolder("SUBIR_MEGA", root)
            End If

            ' Aumentar la barra de progreso.
            ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))
            ' Actualizar label para informar al usuario.
            lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Subiendo archivo..."))
            ' Aumentar la barra de progreso.
            ' ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))

            ' Subimos el archivo al directorio "SUBIR_MEGA", pasando la ruta del archivo a subir y el directorio de mega donde debe subirlo.
            'BackgroundWorker1.RunWorkerAsync()
            Dim archivo As INode = cliente.UploadFile(Form1.txtruta.Text, carpeta)

            ' Obtener el link de descarga del archivo subido por si se requiere para algo.
            ProgressBar1.Invoke(New MethodInvoker(Sub() ProgressBar1.PerformStep()))
            Dim downloadUrl As Uri = cliente.GetDownloadLink(archivo)
            ' Actualizar label para informar al usuario.
            lblinfo.Invoke(New MethodInvoker(Sub() lblinfo.Text = "Archivo subido con éxito."))
            MsgBox("Archivo subido con éxito.", vbExclamation)
        Catch [error] As Exception

            ' Algo ha fallado, abortamos el subproceso.

            ' Mensaje en pantalla para informar al usuario del error.
            MessageBox.Show("Error al intentar subir el archivo. " + [error].Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            t.Abort()
        End Try

        ' No se puede cerrar el form desde un subproceso ya que no es desde donde se ha creado. Con este código podemos cerrarlo.
        Me.Invoke(DirectCast(Sub() Me.Close(), MethodInvoker))
    End Sub
    Private Sub dialogosubir_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        Try
            'Instancia un hilo para ejecutar el método "subirArchivoAMega".
            t = New Thread(AddressOf subir_AMega)
            t.Start()
        Catch ex As Exception
            ex.ToString()
        End Try

    End Sub
End Class

Estas capturas muestran en funcionamiento



El archivo subido



Bueno, esto es todo, espero sus buenos comentarios, y sobre todo que les sirva, nos vemos en otra entrega


Comentarios

  1. Gracias! Tengo una pregunta como puedo crear una carpeta dentro de la otra? Y como puedo visualizar el documento que he subido?

    ResponderEliminar
  2. Baje el programa para utilizar el código en mi proyecto, pero al llegar a la línea:
    cliente.Login("correo", "contraseña")
    Se queda subiendo el archivo pero no se visualiza nada en Mega

    ResponderEliminar
    Respuestas
    1. Me pasa lo mismo pero uso net core, se queda pasmado al realizar multiples consultas.

      Eliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic