No diré muchas tonterías, solo te publicaré el código. El código específico es el siguiente:
El código HTML es el siguiente:
<body><input id="fileid" type="file" accept="video/*;capture=camera"onchange="onfile(this)"><input id="btn" type="button" value="submit"><script type="text/javascript">var xhr;function onfile(file) {var fd = new FormData();fd.append("fileToUpload", document.getElementById ('fileId'). archivos [0]); xhr = new XMLHTTPREQUEST (); XHR.OPEN ("POST", "http: // localhost: 8889/testup/upservlet"); // xhr.setRequestHeader ("content-type", "charset = utf-8"); xhr.send (fd); xhr.onreadyStateChange = proceso de procesos data stream end "); if (xhr.status == 200) {var infor = xhr.Responsetext; alert (" Respuesta del lado del servidor = "+infor);}}} </script> </body>El código Java se ve así:
paquete com.yjm.up; import java.io.file; import java.io.fileOutputStream; import java.io.ioexception; import java.io.inputstream; import java.util.list; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; importar; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse; importar org.apache.commons.fileUpload.FileItem; import org.apache.commons.fileupload.disk.diskfileMfactory; importación org.apache.commons.fileUpload.servlet.servletFileUpload; public class UpServlet extiende httpservlet {public void dopost (httpservletRequest solicitud, httpservletResponse respuesta) Lanza ServletException, ioexception {// obtiene el directorio guardado del archivo uplable, la tienda, la tienda up uploged the web web, el subfirector, el archivo de subproyes, el archivo up. inflinfing, el archivo de la tienda, el archivo up. en el archivo up. y no permite el acceso directo desde el mundo exterior para garantizar la seguridad de la cadena de archivo cargado SavePath = this.getServletContext (). GetRealPath ("/Web-Inf/upload"); Archivo de archivo = nuevo archivo (SavePath); System.out.Println ("Test ..."); // Determinar el director de guardado del archivo cargado si existe (! File.Exists () y y y !file.isDirectory()) {System.out.println(savePath + "The directory does not exist, needs to be created");// Create the directory file.mkdir();}// The message prompts String message = "";try {// Use the Apache file upload component to process file upload steps: // 1. Create a DiskFileItemFactory factory DiskFileItemFactory factory = new DiskFileItemFactory (); // 2. Cree un archivo de carga de archivo ServletFileUpload upload = new ServLetFileUpload (Factory); // Resuelve el upload de carga confusión chino. {// Obtener datos de la manera tradicional;} // 4. Use el analizador ServletFileUpload para analizar los datos cargados. El resultado de análisis devuelve una recopilación de la lista <FileItem>. Cada FileItem corresponde al elemento de entrada de una lista de formulario de formulario <LeitEitem> list = upload.parserequest (solicitud); for (fileItem item: list) {// Si los datos de un elemento de entrada normal están encapsulados en el archivoItem if (item.isFormfield ()) {String name = item.getFieldName (); // Resuelve el problema chino confuso de datos de los elementos de entrada ordinarios Valor de cadena = item.getString ("utf-8"); // valor = nuevo valor = nuevo String (value.getBytes ("ISO8859-1"), "UTF-8"); System.out.println (name + "=" + valor);} else {// Si el elemento del archivo encapsula el archivo cargado // obtenga el nombre de archivo cargado, string fileNeNeM.getName (); System.out.println (filename); if (obtenga el nombre de archivo cargado, string filename = element FileName.trim (). Equals ("")) {continuar;} // Nota: Los nombres de archivo enviados por diferentes navegadores son diferentes. Algunos navegadores envían archivos con rutas, como: // c: /a/b/1.txt, y algunos son solo nombres de archivos simples, como: 1.txt // procesar la parte de ruta del nombre de archivo del archivo cargado obtenido, solo la parte del nombre del archivo está retenido filename de archivo.substring (fileNeame.lastIndexof ("//") + 1); // obtiene el nombre de la entrada de la entrada del mínimo de la entrada del múltiplo en el mínimo de la entrada del artículo. InputStream in = item.getInputStream (); // Cree una salida de archivo FileOutputPutStream out = new FileOutputStream (SavePath + "//" + FileName); // Cree un byte Byte Byte Buffer [] = new Byte [1024 * 1024]; // Crear un búfer de búfer búfer [] = new Byte [1024 * 1024]; // Crea una salida de archivo de File FileOutputStream (SavePath + "//" + FileName); // Cree un búfer de byte búfer [] = nuevo byte [1024 * 1024]; // El identificador de determinar si los datos en la secuencia de entrada se han leído son int len = 0; // bucle para leer el flujo de entrada en el búfer. (len = in.read (buffer))> 0 significa que todavía hay datos en while ((len = in.read (buffer))> 0) {// use FileOutputStream Outtutship para escribir los datos en el buffer en el directorio especificado (SavePath + "//" // + FileName Out.Write (Buffer, 0, Len);} out.flush (); in.close (); // cerrar la salida stream out.close (); // eliminar el archivo temporal generado al procesar el archivo de carga item.delete (); Mensaje = "¡Libre de archivo con éxito!";}}} capt (excepción e) {mensaje = "fallado de carga de archivo!"; E.PrintStackTrace ();} request.setTribute ("Message", Message); request.getRequestDisPatcher ("/Message.jsp"). Award (solicitud, respuesta);}}El paquete Java utilizado se sube más de 1G
Commons-FileUpload-1.2.1.Jar
Commons-IO-1.3.2.Jar
//xhr.setRequestHeader("Content-Type","application/octet-stream ;Charset=utf-8 "); Esto no se puede agregar