Quiero implementar una carga de archivo simple en mi página de intranet, con la configuración más pequeña posible.
Esta es mi parte HTML:
<input id="sortpicture" type="file" name="sortpic" />
<button id="upload">Upload</button>
y este es mi script JS jquery:
$("#upload").on("click", function() {
var file_data = $("#sortpicture").prop("files")[0];
var form_data = new FormData();
form_data.append("file", file_data);
alert(form_data);
$.ajax({
url: "/uploads",
dataType: 'script',
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(){
alert("works");
}
});
});
Hay una carpeta llamada "uploads" en el directorio raíz del sitio web, con permisos de cambio para "usuarios" y "IIS_users".
Cuando selecciono un archivo con el formulario de archivo y presiono el botón de carga, la primera alerta devuelve "[object FormData]". ¿No se llama a la segunda alerta y la carpeta "uploads" también está vacía?
¿Alguien puede ayudarme a descubrir qué está mal?
También el siguiente paso debería ser cambiar el nombre del archivo con un nombre generado por el lado del servidor. Quizás alguien también pueda darme una solución para esto.
Respuestas:
Necesita un script que se ejecute en el servidor para mover el archivo al directorio de cargas. El
ajax
método jQuery (que se ejecuta en el navegador) envía los datos del formulario al servidor, luego un script en el servidor maneja la carga. Aquí hay un ejemplo usando PHP.Su HTML está bien, pero actualice su script JS jQuery para que se vea así:
Y ahora para el script del lado del servidor, usando PHP en este caso.
upload.php : un script PHP que se ejecuta en el servidor y dirige el archivo al directorio de cargas:
Además, un par de cosas sobre el directorio de destino:
Y un poco sobre la función PHP
move_uploaded_file
, utilizada en el script upload.php :$_FILES['file']['name']
es el nombre del archivo a medida que se carga. No tienes que usar eso. Puede darle al archivo cualquier nombre (compatible con el sistema de archivos del servidor) que desee:Y finalmente, tenga en cuenta sus valores de configuración
upload_max_filesize
Y de PHPpost_max_size
, y asegúrese de que sus archivos de prueba no excedan tampoco. Aquí hay ayuda para verificar la configuración de PHP y cómo establecer el tamaño máximo de archivo y la configuración de publicación .fuente
form_data.append
función. Así que cambié el script PHP para reflejar el nuevo nombre de entrada del formulario. También incluí la respuesta del script PHP en la alerta de éxito de ajax para ayudar con la depuración.$_FILES['file']
fuente
fuente
y este es el archivo php para recibir los archivos subidos
fuente
if (true)
haciendo Siempre se evalúa como verdadero, por lo que es inútil, ¿no? También tienes un extremo final rizado.Usa js puro
El nombre de archivo se incluye automáticamente para solicitarlo y el servidor puede leerlo, el 'tipo de contenido' se establece automáticamente en 'multiparte / datos de formulario'. Aquí hay un ejemplo más desarrollado con manejo de errores y envío adicional de json
Mostrar fragmento de código
fuente
Mejor carga de archivos usando Jquery Ajax con Materialise Haga clic aquí para descargar
Cuando selecciona la imagen, la imagen se convertirá en la base 64 y puede almacenarla en la base de datos para que también sea liviana.
fuente