Estoy construyendo una herramienta de administración de imágenes y quiero saber cómo puedo crear una experiencia similar a Vimeo.Procesamiento asincrónico asp.net mvc con retroalimentación de progreso del lado del cliente
Descripción de lo que debe suceder
El usuario será capaz de cargar muchos potencialmente grandes imágenes utilizando plupload (sin recarga de la página). Luego, el servidor realizará las siguientes acciones en cada imagen cargada.
- La imagen se cambia el tamaño en varias versiones (por ejemplo el pulgar, pequeño, medio, grande)
- Cada copia tendrá algunos de procesamiento de imagen hecho (por ejemplo, filtro convolución)
- Estos redimensionado las copias se cargarán en Amazon S3
- Se almacenará información sobre cada imagen en una base de datos (ancho, alto, mimetype, nombre de archivo)
- A continuación, el servidor debe desencadenar algún tipo de información al usuario
Comentarios del lector Asyncronous (herramienta de carga de imágenes)
Plupload tiene muy buena retroalimentación visual al cargar los archivos a mi servidor, sin embargo, quiero para poder dar retroalimentación adicional al usuario mientras el servidor está haciendo todo el procesamiento de la imagen y cargando en el almacenamiento remoto.
Vimeo hace esto muy bien. Cuando sube un video, confirma que se ha cargado, pero luego dice "estamos codificando su video, espere" y la IU proporciona algún tipo de indicador de progreso.
Me gustaría dar al usuario dos tipos de comentarios después de que las imágenes se hayan cargado en mi servidor. Cada vez que una imagen ha sido procesado y enviado a S3 me gustaría:
- actualización de un mensaje en el navegador diciendo "5 de 15 imágenes han sido procesados" y me gustaría
- Tener una aparece una miniatura de esa imagen.
Acción Un controlador MVC Ejemplo
[HttpPost]
public virtual ContentResult Upload(Guid albumId)
{
foreach (string file in Request.Files)
{
HttpPostedFileBase f = Request.Files[file] as HttpPostedFileBase;
if (f.ContentLength == 0)
continue;
var uploadDir = Server.MapPath("~/uploads/"+ albumId);
var filePath = Path.Combine(uploadDir, Path.GetFileName(hpf.FileName));
f.SaveAs(filePath);
// How can I trigger some async task here that would be able
// to trigger some sort of feedback to the browser when complete?
SomeAsyncImageProcessor.ProcessImage(albumId, filePath); // ???
}
return Content("Success", "text/plain");
}
Restricciones
Las personas que utilizan esta aplicación web va a utilizar la última versión de Chrome. No es necesario abordar problemas entre navegadores. Estamos utilizando asp.net MVC 3 y SQL Server 2005
¿Alguien puede indicarme la dirección correcta? ¿Existen recursos geniales para mostrar cómo puedo lograr algo como esto?
Esto se llama Comet (o ReverseAJAX), y actualmente no es muy compatible con IIS. Eche un vistazo a esto: http://stackoverflow.com/questions/2259633/how-to-implement-reverseajax-comet-in-asp-net-mvc – rsenna
Ha logrado encontrar una solución: estoy tratando de hacer exactamente esto: la imagen cambiará de tamaño en varias versiones (por ejemplo, pulgar, pequeño, mediano, grande) Cada copia tendrá un procesamiento de imagen hecho (por ejemplo, filtro de convolución) Estas copias redimensionadas se cargarán en Amazon S3 Información sobre cada imagen ser almacenado en una base de datos (ancho, alto, tipo de MIME, nombre de archivo) pero no puedo tener éxito ¿podría ayudarme? – Marwan