HPNeo

Crea tu propio Uploader en .Net

Por HPNeo, el 20 de Junio del 2009. Sin comentarios.

Hace ya varios meses que vengo usando una parte de mi hosting como file box, es decir, una carpeta donde alojar unos cuantos archivos, tan simple como eso.

Como quería evitar tener que abrir una pestaña en el navegador para subir los archivos mediante una página, o abrir FileZilla, decidí crear una pequeña aplicación de escritorio que me permita subir los archivos con unos cuantos clicks.

Primero se crea un proyecto en Visual Studio y en el formulario principal se agrega un botón, además de un control OpenFileDialog (en este caso llamado opfFile). Además se referencia el namespace System.Net para el objeto WebClient que se utilizará para subir el archivo.

Luego, en el evento Click del botón que se agregó al inicio, se agrega esta porción de código.

WebClient wc = new WebClient();
opfFile.ShowDialog();
string filename = opfFile.FileName;
if(filename != ""){
	byte[] responseArray = wc.UploadFile("URL_DEL_UPLOADER", "POST", filename);
	string status = Encoding.ASCII.GetString(responseArray);
	switch(status){
		case "Error moving uploaded file.":
			MessageBox.Show("Error moving uploaded file", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
		break;
		case "Invalid file.":
			MessageBox.Show("Invalid file", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
		break;
		case "File too large.":
			MessageBox.Show("File too large", "Info", MessageBoxButtons.OK, MessageBoxIcon.Error);
		break;
		default:
			Clipboard.SetText(status);
			MessageBox.Show("File uploaded successfully", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
		break;
	}
}

Voy a explicar paso por paso lo que hace esta porción de código:

Se crea un objeto WebClient (llamado wc), que permitirá subir los archivos al servidor, a continuación se abre la ventana para elegir el archivo mediante el método ShowDialog del objeto opfFile, para luego guardar la ruta física del archivo elegido en una variable string llamada filename.

Luego, se verifica que la variable filename no esté vacía (en caso de no haber elegido ningún archivo, por ejemplo), y en ese caso se procede a subir el archivo mediante el método UploadFile del objeto wc, guardando la respuesta del servidor en un array de byte llamado responseArray. El método UploadFile contiene 3 parámetros:

Para tener un mayor control de lo que sucede al subir el archivo, he creado un script en PHP que maneja el archivo subido (el cual explico líneas más abajo) y devuelve una serie de expresiones de acuerdo a la situación de la subida. Para que la aplicación sepa en qué estado ha terminado el script se obtiene la cadena que el servidor devolvió mediante la instrucción Encoding.ASCII.GetString(responseArray), el cual se guarda en una variable string llamada status.

Por último se verifica la cadena regresada mediante un switch y varios casos, algo que no necesita mayor explicación. El caso por defecto es la ruta del archivo en el servidor, el cual se copia al portapapeles (esto último me permite tener la URL a la mano ni bien termine de subirse el archivo).

El uploader en PHP

Como escribí párrafos arriba, un script en PHP es el encargado de manejar el archivo que se subió mediante el cliente de escritorio. De esta manera se pueden evitar que se suban archivos muy pesados o que puedan ser usados maliciosamente.

<?php
	$file['name'] = $_FILES['file']['name'];
	$file['size'] = $_FILES['file']['size'];
	$file['tmp] = $_FILES['file']['tmp_name'];
	$file['error'] = $_FILES['file']['error'];
	$extension = explode('.', $file['name']);
	$file['extension'] = $extension[count($extension)-1];
	if($file['extension']!='exe')
		if($file['size'] < 600000)
			if(move_uploaded_file($file['tmp'], 'files/'.time().'.'.$file['extension']))
				echo 'http://box.hpneo.com/files/'.time().'.'.$file['extension'];
			else
				echo 'Error moving uploaded file.';
		else
			echo 'File too large.';
	else
		echo 'Invalid file.';
?>

En este caso se procede a guardar en un array los datos del archivo subido, luego empieza el filtrado mediante condicionales if:

Cada condicional tiene su caso contrario, en el cual se muestra el mensaje de error (o la URL del archivo subido, en caso que el proceso haya sido completo con éxito) que será tomado por el cliente de escritorio, como se vió anteriormente.

Como dato adicional, se renombra el archivo subido con un id único que es el timestamp (al cambiar por cada milisegundo es diferente al archivo subido inmediatamente anterior) mediante la función time().

Definitivamente este mini proyecto es algo sencillo pero que cumple su función, y espero que les sirva de igual forma que a mí me sirvió.

Nick and Norah’s Infinite Playlist

Por HPNeo, el 14 de Junio del 2009. 4 comentarios.

nick_and_norah

Hoy he visto Nick and Norah’s Infinite Playlist después de mucho tiempo. El por qué de la demora en ver esta película se debe a una sola cosa: Miedo al dolor. Y es que este tipo de películas (entre las cuales está Superbad y 500 Days of Summer) me hacen sentir mal porque: a) No tengo amigos (Superbad) y b) No tengo enamorada (Nick and Norah… y 500 Days…).

En fin, hoy la vi luego de ver Valkyrie (la cual me parece buena, por cierto) y por un lado mis miedos se hicieron realidad y por otro me sentí a gusto. Es una historia romántica que me hace recordar que estoy solo y que me muestra una bonita y perfecta relación entre dos personas, pero eso ya lo dije.

El asunto es que si quieren pasar un rato agradable con alguien agradable, bajen esa película (o cómprenla si no saben qué es un torrent) y véanla.

Cartas

Por HPNeo, el 21 de Mayo del 2009. 1 comentario.

Desde que recuerdo (lo cual no es mucho) me han gustado las cartas. Escribirlas y recibirlas. Aunque ni lo uno ni lo otro han sucedido muy a menudo. Para mí, las palabras fluyen mejor escribiendo que diciéndolas. Y aunque es raro en estos tiempos mandarse cartas, o e-mails, o notitas, aún no pierdo las esperanzas de tener la oportunidad de hacerlo. Y, quien sabe, recibir algun texto escrito a mano.

Existe cierta sensación de romanticismo, encanto, cuando escribes una carta. Es como volver 50 años atrás y poder hacer algo tan simple pero tan especial. Al menos así lo siento. Poder tomarse el tiempo de buscar la palabra adecuada para ese sentimiento que uno no puede explicar en el momento mismo, o definir con toda la paciencia del mundo todas esas cosas que a uno le quitan el habla. Es como magia.

En estos momentos me encantaría escribir unas cuantas cartas y enviarlas a quienes correspondan, pero no creo que cambie mucho el hecho de expresar todo lo que siento en estos momentos a esas personas. Y, al menos yo, creo que una carta debe cambiar la vida de alguien. O quizá no tenga el valor para hacerlo.

Nah, no eres así

Por HPNeo, el 19 de Mayo del 2009. 3 comentarios.

Ya sé que todas las personas somos diferentes y blablabla, pero creo que puedo considerarme un tipo mucho más diferente. Peculiar.

Hasta ahí no hay ningún problema, ya que uno es tal y como quiere ser. El problema es cuando una persona te conoce y niega esas diferencias tan grandes que te separan del común colectivo. Y de que me ha pasado, me ha pasado.

Nah, al final yo termino siendo igual que todos y solo es una apariencia para hacerme el interesante. ¬¬

Double Feature

Por HPNeo, el 9 de Mayo del 2009. Sin comentarios.

Double Feature es mi segunda aplicación “seria” que sirve para organizar películas. Técnicamente es un gran paso adelante con respecto a Nuff Said (ahora uso SQLite para la base de datos y he hecho uso de más componentes del lenguaje C# y del mismo .Net).

Si desean más información sobre Double Feature pueden consultar su propia página.

NICHE Y YAIPEN… ¿VAMOS?

Por HPNeo, el 8 de Mayo del 2009. 3 comentarios.

Con el boom de la tecnología, la Web 2.0, los CMS y el Office 2007, los profesores han cambiado la forma de comunicarse con los alumnos. Uno de estos ejemplos es mi ex profesor de estadística.

El ciclo pasado, tratando de ser más accesible a los alumnos, mi estimado profesor S. nos pidió nuestro correo electrónico para pasarnos algún material interesante del curso, y para tenernos informados acerca de nuestras notas y todo eso.

Parece que creyó interesante este material de estudio. Quizá porque es su empresa la que “auspicia” el evento. O porque le gusta el Grupo Niche.

Brand New Day

Por HPNeo, el 5 de Mayo del 2009. 2 comentarios.

633736147053912349_391

No hay mucho que decir, tengo 18 y estoy tratando de estudiar una carrera que no me satisface por completo. Por ratos programo y dedico la mayor parte de mi vida a aburrirme y a tratar de desaburrirme.

Ahora, en serio. Mi vida apesta, mucho más que hace un año o dos, cuando empecé esto, así que quizá no publique mucho y lo que publique no sea del agrado de todos, o casi todos.

Bienvenidos al retcon de mi vida.

Categorías

Archivos

Julio 2009
Lun Mar Mie Jue Vie Sab Dom
« Jun    
 12345
6789101112
13141516171819
20212223242526
2728293031  

Proyectos

Esta es la versión 3.0 del theme hecho por HPNeo exclusivamente para este blog.