java - trabajador - uso correcto del diablito de carga




¿Cuál es la mejor manera de manejar cargas de fotos? (14)

Estoy haciendo un sitio web para la boda de un miembro de la familia. Una característica que solicitaron fue una sección de fotos donde todos los invitados podían ir después de la boda y subir sus fotos. Dije que esta era una idea estelar y me fui a construirla.

Bueno, solo hay un problema: la logística. Las velocidades de carga son lentas y las fotos de las cámaras modernas son enormes (2-5 + Megs).

Solo necesitaré imágenes de ~ 800 px de ancho y algunas de ellas pueden requerir rotación, así que idealmente estoy buscando utilizar un editor del lado del cliente para hacer tres cosas:

  1. Permita que los usuarios elijan varios archivos
  2. Déjalos rotar algunas imágenes para que estén en el camino correcto
  3. Cambiar el tamaño de ellos y luego subirlos

Y en mi mundo de sueños, sería libre y de código abierto. ¿Algunas ideas?

Solo un recordatorio: esto es algo que los invitados deben usar. Algunos de ellos serán bastante expertos en informática, pero otros serán casi completamente analfabetos. La instalación de aplicaciones de escritorio no es realmente una opción. Y supongo que el 98% de ellos tienen instalados Flash y Java.

Editar: Preferiría una opción Flash / Java sobre SilverLight, sobre todo porque tiene una tasa de instalación más pequeña en este momento, pero también porque estoy en Linux y me gustaría probarla =)


¿Está enviando un correo electrónico a la foto en una opción disponible?

La mayoría de las personas que desean compartir fotos probablemente ya saben cómo enviar fotos por correo electrónico. Y la mayoría de los clientes de correo electrónico ya han resuelto los problemas de la carga de archivos.

Simplemente configure una cuenta de gmail / whatevermail y haga que su sitio web realice una encuesta en la bandeja de entrada.

Es algo así como lo que TwitPic hace para Twitter, pero sus requisitos parecen ser más simples que eso.


GIMP ( http://www.gimp.org/ ) es una buena herramienta para hacer cambios de tamaño y es de código abierto.


Otra opción podría ser permitir que las personas suban sus fotos a cualquier servicio al que estén acostumbrados (flickr, google, smugmug o cualquier otro), y solo acepte un nombre de usuario para ese servicio, o una URL para la carpeta.

Luego puede hacer que su aplicación tome una copia de esas imágenes para almacenarlas localmente con una interfaz consistente.


Personalmente, la mayoría de los usuarios no entienden DPI y sus imágenes recortadas terminan siendo más grandes que php.ini para la mayoría de las compañías de hosting.

No estoy seguro de cuánto control quiere darles o cómo quiere que se comporte el lado público.

Sugiero usar una aplicación FTP de Dropbox como http://etonica.com/dropbox/index.html (tango dropbox). Es gratis para sus clientes y solo tiene que pagar su versión para que pueda configurar la información de FTP. y asegúralo.

Les pediría que descarguen algo de link paint.net (que es GRATIS) para que editen las fotos al tamaño adecuado y luego simplemente las arrastren y las suelten en esta aplicación. es fácil y no requiere que php.ini se modifique.

También podría usar algo como la aplicación de director de slideshowpro.


Si estás haciendo esto con Flash y usando Flickr, entonces verificaría la biblioteca AS3 Flickr:

http://code.google.com/p/as3flickrlib/

que tiene soporte para cargar imágenes.

La carga requiere autenticación. La biblioteca también contiene un control basado en Flex para manejar esto:

http://www.mikechambers.com/blog/2008/08/12/flex-based-flickr-api-authorization-control/

(el resto de la biblioteca es ActionScript 3 y se puede usar en Flex o Flash.

Probablemente, la solución más fácil sea simplemente cargar las imágenes en Flickr, editarlas en Picnik (integradas ahora en Flickr) y luego cargarlas en el sitio de los usuarios utilizando los canales RSS de Flickr o las API:

http://www.flickr.com/help/picnik/

http://www.flickr.com/services/api/

Espero que ayude...

cámaras de micrófono

[email protected]


Picasa es una aplicación de gestión de fotos bastante buena / gratis. Te permite hacer algunas ediciones impresionantes, y tiene capacidades de carga, aunque no recuerdo si se cargará a ningún lado, o solo a ciertos sitios populares (como Flickr).


¿Qué le parece usar PhotoShop Online? Le permite editar fotos con un editor basado en web y ofrece 2GB de almacenamiento. No lo he usado yo mismo, así que no sé si permite que múltiples usuarios accedan a la misma cuenta


Estoy completamente de acuerdo con zigdon, permitir sitios diferentes, pero solo recoger fotos de la web. Aún desea permitir subidas y poner un límite al tamaño.

Ahora, si quieres ponerte en algo grande, te sugiero ponerle un tope al tamaño y luego usar JQuery (u otra biblioteca) para trabajar con las imágenes.

Solo mis 2 centavos


También puede hacer que envíen las fotos por correo electrónico a picasa. La web de Picasa tiene una función en la que puedes enviar imágenes a un correo electrónico "secreto" que las publicará en una cuenta de picasa. Configure una cuenta picasa, distribuya el correo electrónico "secreto" y espere a que aparezcan todas las imágenes.


Yo usaría un applet. Podría hacer el cambio de tamaño de las imágenes y rotarlas en el lado del cliente.

Parece que JUpload puede hacer esto por ti.


Actualmente estoy obligado a implementar el requisito similar a Oli.

Creo que Facebook.com usa un applet de Java de algún tipo, y funciona bastante bien, pero no estoy seguro si el applet está disponible como OSS. Voy a buscar en JUpload sugerido por ScArcher2.

Si no conoces ningún otro buen applet, por favor sigue haciéndolo.




Depende del servidor web. Si puede usar servlets, intente esto:

// UploadServlet.java : Proof of Concept - Mike Smith March 2006
// Accept a file from the client, assume it is an image, rescale it and save it to disk for later display
import javax.servlet.http.*;
import javax.imageio.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
import java.awt.image.*;
import java.awt.*;

public class UploadServlet extends HttpServlet  {

public static void printHeader(PrintWriter pw)  {
    pw.println("<HEAD><TITLE>Upload Servlet</TITLE><HEAD>");
    pw.println("<BODY>");
}

public static void printTrailer(PrintWriter pw)  {
    pw.println("<img src=\"../images/poweredby.png\" align=left>");
    pw.println("<img src=\"../images/tomcat-power.gif\" align=right>");
    pw.println("</BODY></HTML>");
}


public void init()  {  // Servlet init() : called when the servlet is LOADED (not when invoked)
}

public void service(HttpServletRequest req, HttpServletResponse res)   throws IOException {
    DiskFileItemFactory dfifact;
    ServletFileUpload sfu; 
    java.util.List items;
    Iterator it;
    FileItem fi;
    String field, filename, contype;
    boolean inmem, ismulti;
    long sz;
    BufferedImage img;
    int width, height, nwidth, nheight, pixels;
    double scaling;
    final int MAXPIXELS = 350 * 350;

    res.setContentType("text/html");
    PrintWriter pw = res.getWriter();
    printHeader(pw);

    ismulti = FileUpload.isMultipartContent(req);
    if (ismulti)  {
        pw.println("Great! Multipart detected");
        dfifact = new DiskFileItemFactory(999999, new File("/tmp"));
        sfu = new ServletFileUpload(dfifact);
        try  {
            items = sfu.parseRequest(req);
        } catch (FileUploadException e)  {
            pw.println("Failed to parse file, error [" + e  + "]");
            printTrailer(pw);
            pw.close();
            return;
        }
        it = items.iterator();
        while (it.hasNext())  {
            fi = (FileItem) it.next();
            if (fi.isFormField())  {
                pw.println("Form field [" + fi.getFieldName() + "] value [" + fi.getString() + "]");
            }
            else  {  // Its an upload
                field = fi.getFieldName();
                filename = fi.getName();
                contype = fi.getContentType();
                inmem = fi.isInMemory();
                sz = fi.getSize();
                pw.println("Upload field=" + field + " file=" + filename + " content=" + contype + " inmem=" + inmem
                    + " size=" + sz);
               InputStream istream = fi.getInputStream();
               img = ImageIO.read(istream);
               nwidth = width = img.getWidth();
               nheight = height = img.getHeight();
               pixels = width * height;
               if (pixels > MAXPIXELS)  {
                   scaling = Math.sqrt((double) MAXPIXELS / (double) pixels);
                   nheight = (int) ((double) height * scaling);
                   nwidth = (int) ((double) width * scaling);
               }
               BufferedImage output = new BufferedImage(nwidth, nheight, BufferedImage.TYPE_3BYTE_BGR);
               Graphics2D g = output.createGraphics();
               g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
               g.drawImage(img, 0, 0, nwidth, nheight, null);
               ImageIO.write(output, "jpeg", new File("/var/tomcat/webapps/pioneer/demo.jpg"));
               istream.close(); 
            }
        }
    }
    else
        pw.println("Bugger! Multipart not detected");
        printTrailer(pw);
        pw.close();
}

public void destroy()  {
}
}






flash