Я не скажу много чепухи, я просто опубликую вам код. Конкретный код заключается в следующем:
HTML -код выглядит следующим образом:
<body> <input id = "fileId" type = "file" access = "video/*; capture = camera" onchange = "onfile (this)"> <input id = "btn" type = "value =" opper "> <script type =" text/javascript "> var xhr; function onfile (file) {var fd = new formdata (); document.getElementById ('fileId'). Files [0]); xhr = new xmlhttprequest (); xhr.open ("post", "http: // localhost: 8889/testup/upservlet"); // xhr.setrequestheader ("content-type", "charset = utf-8"); xhr.send (fd); xhr.onshudaystatechange = processresponse;} functionRespons end Data Stream End "); if (xhr.status == 200) {var infor = xhr.responsetext; alert (" server -site response = "+infor);}}} </script> </body>Код Java выглядит так:
пакет com.yjm.up; импорт java.io.file; import java.io.fileoutputstream; импорт java.io.ioexception; import java.io.inputstream; импорт java.util.list; import javax.servlet.servletexcept javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; import org.apache.commons.fileupload.fileitem; импорт org.apache.commons.fileupload.disk.diskfileemfactor; org.apache.commons.fileupload.servlet.servletfileupload; открытый класс upservlet extends httpservlet {public void dopost (httpservletrequest, httpservletrestons Разрешить прямой доступ от внешнего мира, чтобы обеспечить безопасность загруженного файла string savePath = this.getServletContext (). getRealPath ("/web-inf/upload"); file file = new File (savePath); System.out.println ("test ..."); // определить, существует ли сохраненный каталог загруженного файла, если (! {System.out.println (savePath + «Каталог не существует, необходимо создать»); // Создать файл каталога.mkdir ();} // Сообщение проведено DiskFileItemFactory (); // 2. Создать файл загрузки анализаторов ServletFileUpload upload = new ServletFileUpload (Factory); // Решение китайской искаженной загрузки. SetheAderencoDing ("utf-8"); // 3. определить, является ли представленные данные optult upload. Данные традиционным способом;} // 4. Используйте анализатор ServletFileUpload, чтобы анализировать загруженные данные. Результат анализа возвращает коллекцию списка <FieleItem>. Каждый FileItem соответствует элементу ввода списка форм формы <FieleItem> list = upload.parserequest (request); Для (FileItem Item: List) {// Если данные нормального ввода элемента инкапсулируются в файле fileItem if (item.isformfield ()) {string name = item.getfieldname (); // Решение китайской искаженной задачи данных об обычных элементах string value = item.getString ("utf-8"); String (value.getBytes ("iso8859-1"), "utf-8"); system.out.println (name + "=" + value);} else {// если элемент файла инкапсулирует загруженный файл // Получить загруженное имя файла, string filename = item.getName (); filename.trim (). equals ("")) {contine;} // Примечание. Имена файлов, представленные различными браузерами, разные. Некоторые браузеры отправляют файлы с путями, такими как: // c: /a/b/1.txt, а некоторые - просто простые имена файлов, такие как: 1.txt // Обработка части пути файла имени полученного загруженного файла, только часть файла имени файла сохраняется в FileName = //Substring (FILENAME.LastIndexOF ("//") 1); in = item.getInputStream (); // Создать файл выходного потока FileOutputStream OUT = new FileOutputStream (savePath + "//" + filename); // Создать буферный буфер буфера [] = новый Byte [1024 * 1024]; // create Baffer Byte Buffer [] New Byte [1024 * 1024]; // create A File -byte -byte -stleam = stifempeam = stifle -inpeteam = witfeam = // // create a file -byteam [1024 * 1024]; // FileOutputStream (savePath + "//" + filename); // Создать буферный буфер буфера [] = новый байт [1024 * 1024]; // Идентификатор определения того, были ли данные в входном потоке считываются int len = 0; // Цифр для чтения входного потока в буфере. (len = in.read (buffer))> 0 означает, что все еще существуют данные в while (((len = in.read (buffer))> 0) {// Использование выходного потока FileOutputStream для записи данных в буфере для указанного каталога (SavePath + "//" // + filename) Out out.write (buffer, 0, len);} out.flush (); in.close (); // Закрыть выходной поток out.close (); // Удалить временный файл, сгенерированный при обработке элемента загрузки файла.delete (); message = "Загрузка файла успешно!";}}} Catch (Exception e) {message = "Не удастся загрузка файла!";Используемый пакет Java загружается более 1G
Commons-FileUpload-1.2.1.jar
Commons-IO-1.3.2.jar
//xhr.setrequestheader("content-type","pplication/octet-stream; charset=utf-8 "); Это нельзя добавить