EDITAR (Oct 2019):
6 años después, jQuery File Upload claramente todavía está volviendo loca a la gente. Si encuentra poco consuelo en las respuestas aquí, intente una búsqueda de NPM para una alternativa moderna. No vale la pena la molestia, lo prometo.Recomendé Uploadify en la edición anterior pero, como señaló un comentarista, ya no parecen ofrecer una versión gratuita. Uploadify fue tan 2013 de todos modos.
EDITAR:
Esto todavía parece estar recibiendo tráfico, así que explicaré lo que terminé haciendo. Finalmente logré que el complemento funcionara siguiendo el tutorial en la respuesta aceptada. Sin embargo, la carga de archivos jQuery es una verdadera molestia y si está buscando un complemento de carga de archivos más simple, le recomendaría encarecidamente Uploadify . Como se señaló en la respuesta, solo es gratuito para uso no comercial.Antecedentes
Estoy tratando de usar la carga de archivos jQuery de blueimp para permitir que los usuarios carguen archivos. Fuera de la caja, funciona perfectamente , siguiendo las instrucciones de configuración. Pero para usarlo prácticamente en mi sitio web, quiero poder hacer un par de cosas:
- Incluir al usuario que subió el video en cualquiera de mis páginas existentes
- Cambiar el directorio de archivos cargados
Todos los archivos del complemento se encuentran en una carpeta debajo de la raíz.
He intentado...
- Mover la página de demostración a la raíz y actualizar las rutas de los scripts necesarios
- Cambiar las opciones "upload_dir" y "upload_url" en el archivo UploadHandler.php como se sugiere aquí .
- Cambiar la URL en la segunda línea del javascript de demostración
En todos los casos, los espectáculos de vista previa, y se ejecuta la barra de progreso, pero los archivos no pueden cargar y me sale este error en la consola: Uncaught TypeError: Cannot read property 'files' of undefined
. No entiendo cómo funcionan todas las partes del complemento, lo que dificulta la depuración.
Código
El javascript en la página de demostración:
$(function () {
'use strict';
// Change this to the location of your server-side upload handler:
var url = 'file_upload/server/php/UploadHandler.php',
uploadButton = $('<button/>')
.addClass('btn')
.prop('disabled', true)
.text('Processing...')
.on('click', function () {
var $this = $(this),
data = $this.data();
$this
.off('click')
.text('Abort')
.on('click', function () {
$this.remove();
data.abort();
});
data.submit().always(function () {
$this.remove();
});
});
$('#fileupload').fileupload({
url: url,
dataType: 'json',
autoUpload: false,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
maxFileSize: 5000000, // 5 MB
// Enable image resizing, except for Android and Opera,
// which actually support image resizing, but fail to
// send Blob objects via XHR requests:
disableImageResize: /Android(?!.*Chrome)|Opera/
.test(window.navigator.userAgent),
previewMaxWidth: 100,
previewMaxHeight: 100,
previewCrop: true
}).on('fileuploadadd', function (e, data) {
data.context = $('<div/>').appendTo('#files');
$.each(data.files, function (index, file) {
var node = $('<p/>')
.append($('<span/>').text(file.name));
if (!index) {
node
.append('<br>')
.append(uploadButton.clone(true).data(data));
}
node.appendTo(data.context);
});
}).on('fileuploadprocessalways', function (e, data) {
var index = data.index,
file = data.files[index],
node = $(data.context.children()[index]);
if (file.preview) {
node
.prepend('<br>')
.prepend(file.preview);
}
if (file.error) {
node
.append('<br>')
.append(file.error);
}
if (index + 1 === data.files.length) {
data.context.find('button')
.text('Upload')
.prop('disabled', !!data.files.error);
}
}).on('fileuploadprogressall', function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress .bar').css(
'width',
progress + '%'
);
}).on('fileuploaddone', function (e, data) {
$.each(data.result.files, function (index, file) {
var link = $('<a>')
.attr('target', '_blank')
.prop('href', file.url);
$(data.context.children()[index])
.wrap(link);
});
}).on('fileuploadfail', function (e, data) {
$.each(data.result.files, function (index, file) {
var error = $('<span/>').text(file.error);
$(data.context.children()[index])
.append('<br>')
.append(error);
});
}).prop('disabled', !$.support.fileInput)
.parent().addClass($.support.fileInput ? undefined : 'disabled');
});
Me sorprende la falta de documentación; parece que debería ser algo sencillo de cambiar. Le agradecería que alguien me explicara cómo hacer esto.
Respuestas:
Hace unos días estaba buscando una funcionalidad similar y encontré un buen tutorial sobre tutorialzine. He aquí un ejemplo práctico. El tutorial completo se puede encontrar aquí .
Forma simple para mantener el diálogo de carga de archivos:
Y aquí está el código jQuery para cargar los archivos:
Y aquí está la muestra de código PHP para procesar los datos:
El código anterior se puede agregar a cualquier formulario existente. Este programa carga imágenes automáticamente, una vez que se agregan. Esta funcionalidad se puede cambiar y puede enviar la imagen, mientras envía su formulario existente.
Actualicé mi respuesta con código real. Todos los créditos al autor original del código.
Fuente: http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/
fuente
if($_POST)
declaración. Se supone que POST está vacío en el que se envía el contenido del archivo$_FILES['upfile']['tmp_name']
. Con suerte, esto le ahorrará a alguien algo de tiempo.Acabo de pasar 2 horas luchando con jQuery Upload, pero me rendí debido a la cantidad de dependencias (tenía 13 archivos JS incluidos para obtener todas las comodidades).
Hice un poco más de búsqueda y encontré un proyecto genial llamado Dropzone.js , que no tiene ninguna dependencia.
El autor también ha creado una demostración de bootstrap que se inspiró en el complemento jQuery File Upload.
Espero que esto le ahorre tiempo a alguien más.
fuente
También luché con esto, pero lo hice funcionar una vez que descubrí cómo funcionan las rutas en UploadHandler.php: upload_dir y upload_url son las únicas configuraciones que se deben tener en cuenta para que funcione. También consulte los registros de errores de su servidor para obtener información sobre la depuración.
fuente
Echa un vistazo al cargador de arrastrar y soltar de imágenes con vista previa de la imagen utilizando el complemento jquery del cuentagotas.
HTML
JS
CSS
Demo Jsfiddle
fuente
Este es un buen complemento de Angular para cargar archivos, ¡y es gratis!
carga de archivo angular
fuente
Luché con este complemento durante un tiempo en Rails, y luego alguien lo gemificó dejando obsoleto todo el código que había creado.
Aunque parece que no está usando esto en Rails, sin embargo, si alguien lo está usando, consulte esta joya . La fuente está aquí -> jQueryFileUpload Rails .
Actualizar:
Para satisfacer al comentarista, actualicé mi respuesta. Esencialmente " usa esta joya , aquí está el código fuente ". Si desaparece, hazlo por el camino largo.
fuente
Hola, prueba el enlace de abajo, es muy fácil. He estado atascado durante mucho tiempo y solucionó mi problema en pocos minutos. http://simpleupload.michaelcbrook.com/#examples
fuente
Droply.js es perfecto para esto. Es simple y viene empaquetado con un sitio de demostración que funciona desde el primer momento.
fuente
Puedes usar uploadify este es el mejor complemento jquery de carga múltiple que he usado.
La implementación es fácil, el soporte del navegador es perfecto.
fuente
Para el complemento UI, con página jsp y Spring MVC ..
Ejemplo de HTML . Debe estar dentro de un elemento de formulario con un atributo id de fileupload
Controladores de solicitud de carga y eliminación de muestra
Clase de muestra para generar la respuesta json requerida
Ver https://pitipata.blogspot.co.ke/2017/01/using-jquery-file-upload-ui.html
fuente