json - files - qq uploader
El método FineUploader OnComplete no se activa. Novato, requiere algo de agarre (1)
Por lo tanto, estoy usando FineUploader 3.3 dentro de una aplicación MVC 4, y este es un plugin muy bueno, vale la pena el costo nominal. Gracias por construir esto, muy útil. Ahora, solo necesito que funcione correctamente.
Soy bastante nuevo en MVC y absolutamente nuevo en la devolución de JSON, así que necesito ayuda para hacer que esto funcione. Esto es lo que estoy usando, todo dentro de doc.ready.
var manualuploader = $(''#files-upload'').fineUploader({
request:
{
endpoint: ''@Url.Action("UploadFile", "Survey")'',
customHeaders: { Accept: ''application/json'' },
params: {
//variables are populated outside of this code snippet
surveyInstanceId: (function () { return instance; }),
surveyItemResultId: (function () { return surveyItemResultId; }),
itemId: (function () { return itemId; }),
imageLoopCounter: (function () { return counter++; })
},
validation: {
allowedExtensions: [''jpeg'', ''jpg'', ''gif'', ''png'', ''bmp'']
},
multiple: true,
text: {
uploadButton: ''<i class="icon-plus icon-white"></i>Drop or Select Files''
},
callbacks: {
onComplete: function(id, fileName, responseJSON) {
alert("Success: " + responseJSON.success);
if (responseJSON.success) {
$(''#files-upload'').append(''<img src="img/success.jpg" alt="'' + fileName + ''">'');
}
}
}
}
EDITAR: He estado usando Internet Explorer 9, luego cambié a Chrome, Firefox y puedo subir muy bien. ¿Qué se requiere para IE9? La validación no funciona, independientemente del navegador.
Los incendios de los puntos finales y los archivos / parámetros están llenos, ¡así que todo está bien! La validación no impide que un usuario seleccione algo fuera de esta lista, pero puedo trabajar con esto por el momento. Puedo guardar con éxito y hacer lo que necesito hacer con mi carga, menos el encendido de OnComplete. En realidad, en IE, obtengo un diálogo ABRIR / GUARDAR con lo que tengo actualmente.
Pregunta: ¿Están los parámetros de función en onComplete (id, filename, responseJSON) llenados por la declaración o en el camino de salida? Estoy confundido acerca de esto. ¿Mi JSON tiene que tener estos parámetros y está lleno?
No hago esto (rellenar esos parámetros), y mi método de salida en C # devuelve JsonResult con el siguiente aspecto, simplemente devolviendo ''éxito'' (si corresponde):
return Json(new { success = true });
¿Debo agregar más? Esta línea es después de que se realiza el ahorro, y todo lo que quiero hacer es decirle al usuario que todo está bien o no. ¿La propiedad ''éxito'' en mi Json coincide con la respuestaJSON.success?
¿Qué me estoy perdiendo, o tengo algo mal? Estoy seguro de que esto también ayudaría a otros, así que espero que se tomen el tiempo y ayuden. ¡Lo aprecio! Gracias.
Abordando los artículos en su pregunta:
- En cuanto a las restricciones dentro del cuadro de diálogo "Seleccionar archivos", también debe establecer la opción de validación
acceptFiles
. Consulte la sección de opciones devalidation
en el archivo Léame para obtener más detalles. - Su propiedad de opción de
validation
en el lugar equivocado. No debe estar bajo la propiedad / opción derequest
. Lo mismo es cierto para sus opciones / propiedades detext
,multiple
y decallbacks
. Además, no está configurando sus devoluciones de llamada correctamente para el complemento jQuery. - El diálogo de abrir / guardar en IE se debe a que su servidor no devuelve una respuesta con el encabezado correcto "Content-Type". El tipo de contenido de su respuesta debe ser "text / plain". Consulte el archivo Léame del lado del servidor para obtener más detalles.
- Cualquier cosa que tu servidor devuelva en su respuesta será analizada por Fine Uploader usando
JSON.parse
al manejar la respuesta del lado del cliente. El resultado de invocarJSON.parse
en la respuesta de su servidor se pasará como el parámetroresponseJSON
a su controlador de devolución de llamadaonComplete
. Si desea pasar información específica de su servidor a su código del lado del cliente, como algún texto que desee mostrar en el lado del cliente, el nuevo nombre del archivo cargado, etc., puede hacerlo agregando las propiedades adecuadas a su respuesta del servidor Esta información estará disponible para usted en su controladoronComplete
. Si no tiene necesidad de esto, simplemente puede devolver la respuesta de "éxito" que está devolviendo actualmente. El archivo Léame del lado del servidor, al que me he vinculado, proporciona más información sobre todo esto.
Para aclarar lo que dije en el n. ° 2, su código debería verse así:
$(''#files-upload'').fineUploader({
request: {
endpoint: ''@Url.Action("UploadFile", "Survey")'',
customHeaders: { Accept: ''application/json'' },
params: {
//variables are populated outside of this code snippet
surveyInstanceId: (function () { return instance; }),
surveyItemResultId: (function () { return surveyItemResultId; }),
itemId: (function () { return itemId; }),
imageLoopCounter: (function () { return counter++; })
}
},
validation: {
allowedExtensions: [''jpeg'', ''jpg'', ''gif'', ''png'', ''bmp'']
},
text: {
uploadButton: ''<i class="icon-plus icon-white"></i>Drop or Select Files''
}
})
.on(''complete'', function(event, id, fileName, responseJSON) {
alert("Success: " + responseJSON.success);
if (responseJSON.success) {
$(''#files-upload'').append(''<img src="img/success.jpg" alt="'' + fileName + ''">'');
}
});