В этой статье разделяют конкретные коды для многопрофильной загрузки Javaweb, упаковки и загрузки ZIP для вашей ссылки. Конкретный контент заключается в следующем
Функции загрузки и загрузки файлов часто используются в проектах. В этой статье суммируются сцены в среде Javaweb, многопрофильную загрузку и пакетную упаковку и функции загрузки, включая стойку регистрации и бэкэнд.
Прежде всего, давайте проясним:
Страница не может быть обновлен Ajax -запрос напрямую, а запросы загрузки и загрузки не могут быть отправлены. Загрузка и загрузка должны быть реализованы на основе всего запроса страницы. Эта функция обычно достигается путем создания форм форм в проектах.
1. Загрузить несколько файлов
Требования к проекту состоит в том, чтобы реализовать функцию загрузки с несколькими изображениями. Ссылаясь на множество методов плагина, найденных в Интернете, я решил выбрать оригинальное решение для загрузки JQUERY. Следуйте приведенным ниже шагам, чтобы опубликовать конкретный код.
1. HTML -часть (может быть опущена для строительства с JS)
<form id = "uploadform" method = "post" ectype = "multipart/form-data"> <input type = "file" hidden name = "fileImage" MALTY/> <a href = "javascript: void (0);" rel = "внешний nofollow" rel = "внешний nofollow" id = "filesubmit" onclick = "uploadfilemulti ()"> загружать информацию </a> </form>
Есть несколько объяснений:
1. enctype = "multipart/form-data" в форме
2. В примере используйте теги для построения отправки
2. JS Part
var formData = new FormData ($ ("#uploadform") [0]); formData.Append ("foldName", "datumList"); //Set the parent folder name formData.append("oderCode", selfOrderCode);formData.append("datumType", datumType);$.ajax({ type: "POST", data: formData, url: "order/datumList/batchInsertDatumLists", contentType: false, processData: false, success: function (result) { if (Результат. }, error: function () {showerRortoast ('запрос не удастся!')}}); Есть несколько объяснений выше:
1. var formData = new FormData ($ ("#uploadform") [0]);
2. Использовать formData.append ("Odercode", SelforderCode); Чтобы добавить другие параметры
Java Backend
MultiparThttpServletRequest mrequest = (MultiparThttpServLetRequest) запрос; List <MultiveFile> files = mrequest.getFiles ("fileImage");Есть несколько объяснений выше:
1. Получите MultiparthttpservletRequest, соответствующий имени тега файла
2. Скачать партии файлов
В этом проекте требование состоит в том, чтобы загрузить партию файлов в партиях. Используйте ZIP, чтобы сжать файл на сервере, а затем загрузите файл клиенту.
Для онлайн -запроса использование собственного класса вывода файлов Java не может решить проблему искаженных имен файлов в сжатых файлах. Решение: используйте пакет Ant.jar. При создании сжатого файла вы можете установить формат кодирования файла, и проблема искаженных имен файлов будет решена.
HTML -часть (может быть опущена для строительства с JS)
<form id = "uploadform" method = "post" ectype = "multipart/form-data"> <div> <input type = "hidden" name = "ordercode"/> <input type = "hidden" name = "datumType"/> <a href = "javascript: void (0);" rel = "внешний nofollow" rel = "внешний nofollow" onclick = "batchdatumlistdayload ()"> Batchdown </a> </div> </form>
JS Part
// пакетная загрузка функции BatchDatumListDownload () {var param = {}; param.datumtype = $ ("#datumtypeq"). val (); if (param.datumtype == -1) {param.datumtype = null; // Запрос всех} param.ordercode = selforderCode; $ ("#uploadform input [name = ordercode]"). val (param.ordercode); $ ("#uploadform input [name = datumType]"). val (param.datumtype); var form = $ ("#uploadform") [0]; form.Action = "order/datumList/packdownloadDatumList"; form.method = "post"; form.submit (); // form отправить}Бэкэнд -часть
public void batchdownloaddatumlist (datumListvo datumListvo, httpservletresponse response) {try {// Query File списки <datumlistvo> volist = datumlistservice.querydatumlists (datumlistvo); // Сжатие списка файлов <File> files = new ArrayList <> (); for (datumListvo: volist) {file file = new File (vo.getDatumurl ()); files.add (file); } String fileName = datumListvo.getOrderCode () + "_" + datumListvo.getDatumType () + ".zip"; // Создать временный файл для упакованной загрузки на стороне сервера String GlobalUploadPath = ""; String osName = System.getProperty ("os.name"); if (osname.tolowercase (). indexof ("windows")> = 0) {globaluploadpath = globalkeys.getString (globalkeys.windows_upload_path); } else if (osname.toloarcecase (). indexof ("linux")> = 0 || osname.toloarceCase (). indexof ("mac")> = 0) {globaluploadpath = globalkeys.getString (globalkeys.linux_upload_path); } String outFilePath = globalUploadPath + file.separator + filename; File file = new File (outFilePath); // Файл выходной поток fileOutputStream outStream = new FileOutputStream (file); // Сжатие потока ZipoutputStream Toclient = new ZipOutputStream (Outstream); // Установить кодирование символов в сжатом файле, в противном случае он станет искаженным toclient.setencoding ("gbk"); Ziputil.zipfile (файлы, toclient); toclient.close (); outstream.close (); Ziputil.downloadzip (файл, ответ); } catch (Exception e) {e.printstackTrace (); }}Среди них ziputil.java
/** * Файлы в списке сжатых файлов * * @param files * @param outputstream * @throhs ioexception */public static void zipfile (списки файлы, zipoutputstream outputstream) бросает ioexception, Servletexception {try {int size = files.size (); // файлы в сжатом списке для (int i = 0; i <size; i ++) {file file = (file) files.get (i); try {zipfile (file, outputstream); } catch (Exception e) {продолжить; }}} catch (Exception e) {throw e; }}/** * Запишите файл в файл Zip * * @param inputfile * @param outputstream * @throws exception */public static void zipfile (файл inputfile, ZipOutputStream outpertStream) Throws ioException, ServletExcept FileInputStream (inputFile); BufferedInputStream binstream = new BufferedInputStream (inStream); Zipentry intry = new Zipentry (inputfile.getName ()); outputStream.putNextEntry (inting); final int max_byte = 10 * 1024 * 1024; // максимальный поток составляет 10 м длиной streamtotal = 0; // емкость принимающего потока int streamnum = 0; // количество потоков, которые необходимо разделить int deavybyte = 0; // количество символов, оставшихся в файле Byte [] inoutbyte; // байтовый массив принимает данные файла streamtotal = binstream.available (); // Максимальное количество символов потока получается через доступный метод streamnum = (int) math.floor (streamtotal /max_byte); // количество символов, оставшихся, которые должны быть разделены для получения потокового файла Liestbyte = (int) Streamtotal % max_byte; // после разделения файла оставшееся число if (streamnum> 0) {for (int j = 0; j <streamnum; ++ j) {inoutbyte = new Byte [max_byte]; // Читать в потоке и сохранить его в байтовом массиве binstream.read (inoutbyte, 0, max_byte); outputStream.write (inoutbyte, 0, max_byte); // Записать поток}} // Записать оставшиеся данные потока inoutbyte = new Byte [LeaveByte]; binstream.read (inoutbyte, 0, deafbyte); outputStream.write (inoutbyte); outputStream.closeEntry (); // закрывает текущую запись ZIP и позиционирует поток для написания следующей записи binstream.close (); // close instream.close (); }} else {бросить новое ServletException ("файл не существует!"); }} catch (ioException e) {throw e; }}/** * Загрузите упакованный файл * * @param file * @param response */public static void downloadzip (файл файла, httpservletresponse response) {try {// Загрузить файл в виде потока. BufferedInputStream fis = new BufferedInputStream (new FileInputStream (file.getPath ())); byte [] buffer = new Byte [fis.aveable ()]; fis.read (buffer); fis.close (); // четкий ответ ответа ответа.reset (); OutputStream toclient = new BufferedOutputStream (response.getOutputStream ()); response.setContentType («Приложение/октет-поток»); response.setheader ("content-disposition", "Attactment; filename =" + file.getName ()); toclient.write (буфер); toclient.flush (); toclient.close (); file.delete (); // Удалить сгенерированный файл на стороне сервера} catch (ioException ex) {ex.printStackTrace (); }} Вышеуказанное в основном соответствует требованиям для загрузки и загрузки файлов.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.