Пример асинхронной загрузки файлов jQuery Uploadify + Apache Fileupload
1. Вы можете ограничить размер и тип загружаемых файлов. Теоретически загружать можно любой тип файла (можно настроить по API);
2. Apache commons-fileupload-1.3.1.jar используется в качестве инструмента загрузки в фоновом режиме. Этот пример поддерживает одновременную загрузку нескольких файлов;
3. Каталог для загрузки файлов может быть указан произвольно, настройте его в файле web.xml;
Подробную информацию об API Uploadify см. на странице http://www.uploadify.com/documentation/.
FileUploadServlet
Скопируйте код кода следующим образом:
пакет com.xiaoxing.upload;
импортировать java.io.File;
импортировать java.io.IOException;
импортировать java.io.PrintWriter;
импортировать java.io.UnsupportedEncodingException;
импортировать java.text.SimpleDateFormat;
импортировать java.util.Date;
импортировать java.util.Iterator;
импортировать java.util.List;
импортировать java.util.UUID;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.http.HttpServlet;
импортировать javax.servlet.http.HttpServletRequest;
импортировать javax.servlet.http.HttpServletResponse;
импортировать org.apache.commons.fileupload.FileItem;
импортировать org.apache.commons.fileupload.disk.DiskFileItemFactory;
импортировать org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* <h1>Загрузка файла Apache Fileupload (2014-5-3)</h1>
* <p>1. Если вас заинтересовал этот пример и вы хотите узнать больше, добро пожаловать в сообщество онлайн-обучения Java Private School (329232140)</p>
* <p>2. Этот пример можно перенести в ваш реальный проект с небольшими изменениями. </p>
*/
публичный класс FileUploadServlet расширяет HttpServlet {
частный статический окончательный длинный сериалVersionUID = 7579265950932321867L;
//Установим каталог для загрузки файлов по умолчанию (если вы не настроили его в web.xml)
Private String uploadDir = "c:/" //Каталог загрузки файлов
Private String tempUploadDir = "c:/"; // Каталог, в котором временно хранятся файлы (автоматически удаляются прослушивателем после уничтожения сеанса)
/*
* (не Javadoc)
* @see javax.servlet.GenericServlet#init()
* Если каталог загрузки файлов настроен в файле web.xml, он будет использоваться в первую очередь для определения существования каталога файлов. Если он не существует, создайте его.
*/
@Override
public void init() выдает ServletException {
// Получаем реальный каталог жесткого диска, где находится этот проект
Строковый путь = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
путь = path.substring(0, path.indexOf("WEB-INF"));
// Определить, существует ли цель, создать ее, если она не существует
Строка uploadDir = path.concat(this.getInitParameter("uploadDir"));
Строка tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
Файл f_uploadDir = новый файл (uploadDir);
Файл f_tempUploadDir = новый файл (tempUploadDir);
если (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
если (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
//Присваиваем значение переменной
this.uploadDir = UploadDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (не Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Не принимать данные, отправленные методом get, и возвращать код состояния ошибки загрузки.
*/
@Override
protected void doGet (запрос HttpServletRequest, ответ HttpServletResponse) выдает ServletException, IOException {
this.setResponse(ответ);
PrintWriter out = response.getWriter();
out.print("{/"error/":/"-1/""); // Недопустимый метод отправки.
}
/*
* (не Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Запросы на загрузку файлов обычно отправляются через POST.
*/
@Override
protected void doPost (запрос HttpServletRequest, ответ HttpServletResponse) выдает ServletException, IOException {
this.setResponse(response); //Установите тип ответа для внешнего анализа
PrintWriter out = response.getWriter();
Строковый результат = "";
пытаться {
// Проверяем, является ли это запросом на загрузку файла
логическое значение isMultipart = ServletFileUpload.isMultipartContent(запрос);
если (isMultipart) {
DiskFileItemFactory Factory = new DiskFileItemFactory(); // Создаем фабричный элемент файла на диске.
Factory.setRepository(new File(tempUploadDir)); // Настраиваем репозиторий (при обеспечении безопасного временного местоположения)
ServletFileUpload upload = new ServletFileUpload(factory); // Создаём новый обработчик загрузки файлов
upload.setSizeMax(1024 * 1024 * 100); // Устанавливаем общий требуемый лимит размера (рекомендуется задавать фронт и бэкенд отдельно, так как во фронтенде и бэкенде используются разные плагины)
List<FileItem> items = upload.parseRequest(request); // Анализируем запрос
Iterator<FileItem> iter = items.iterator() // Обработка загруженных элементов
while (iter.hasNext()) { //Если одновременно загружено несколько файлов, они будут сохранены здесь отдельно.
FileItem item = iter.next();
if (!item.isFormField()) { // Фильтровать поля нефайлового типа в форме
if (!").equals(item.getName())) { // Фильтрация ввода нефайлового типа
String s_name = item.getName(); // Получаем исходное имя файла
int Position = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length()); // Получаем суффикс файла
Строка date = new SimpleDateFormat("ггггММдд").format(new Date());
String s = uploadDir.concat("/").concat(date).concat("/");
//Сохраняем файлы в каталогах по дате здесь
Файл sf = новый файл(ы);
если (!sf.exists()) {
сф.mkdirs();
}
Строка s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
Путь к файлу = новый файл (s_filePath);
item.write(путь);
результат += s_filePath.concat(",");
} еще {
результат = "";
перерыв;
}
}
}
} еще {
результат = "";
}
String s_resultJSON = this.jointJSON(result); // Сращивание возвращает интерфейсный JSON
out.print(s_resultJSON);
} catch (Исключение е) {
е.printStackTrace();
} окончательно {
out.flush();
выход.закрыть();
}
}
/**
* Соедините JSON и верните имя файла и каталог даты сохраненного файла во внешний интерфейс (интерфейсному интерфейсу может потребоваться этот путь для выполнения других операций с формой, таких как сохранение пути к файлу в базе данных).
* @param result строка формата JSON
* @возвращаться
* @throws UnsupportedEncodingException
*/
частная строка JointJSON (результат String) выдает UnsupportedEncodingException {
Строка ул = "";
if(!").equals(результат)) {
String rs[] = result.split(",");
StringBuffer buffer = новый StringBuffer("{/"rows/":[");
for (int i = 0; i <rs.length; i++) {
Строка s_tmpName = rs[i];
s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
buffer.append("{/"name/":/"").append(s_tmpName).append("/"},");
}
стр = буфер.toString();
str = str.substring(0, str.length() - 1).concat("]}");
} еще {
str = "{/"error/":/"-2/"" //Загрузка не удалась
}
вернуть ул;
}
/**
* Установите тип ответа ContentType на «application/x-json».
* Ответ @param
*/
частный недействительный setResponse (ответ HttpServletResponse) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
response.setHeader("управление кешем", "без кеша");
}
}
test_upload.html
Скопируйте код кода следующим образом:
<!DOCTYPE html>
<html>
<голова>
<мета-кодировка="UTF-8">
<title>Пример асинхронной загрузки файлов jQuery Uploadify + Apache Fileupload (2014-5-3)</title>
<link rel="stylesheet" type="text/css" href="/js/uploadify/uploadify.css">
<script src="/js/jquery-1.9.0.js"></script>
<script src="/js/uploadify/jquery.uploadify.min.js"></script>
<тип сценария="текст/javascript">
$(функция() {
$('#fileupload').uploadify({
'метод': 'пост',
'buttonText': 'флэш-загрузка файла',
'fileSizeLimit': '1024 КБ',
'fileTypeExts': '*.gif; *.jpg',
'swf': '/js/uploadify/uploadify.swf',
'uploader': '/upload', //Это путь для загрузки изображений, который представляет собой сервлет, который я настроил в web.xml
'onUploadSuccess' : function(file, data, response) { //Здесь обрабатываются данные, возвращаемые после успешной загрузки изображения.
var ary = eval("(" + данные + ")").rows;
for(var я = 0; я <ary.length; я++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
}
}
});
});
</скрипт>
</голова>
<тело>
<h2>Пример асинхронной загрузки файлов jQuery Uploadify + Apache Fileupload (2014-5-3)</h2>
<p>1. Вы можете ограничить размер и тип загружаемых файлов. Теоретически можно загружать файлы любого типа (можно настроить в соответствии с API);</p>
<p>2. Apache commons-fileupload-1.3.1.jar используется в качестве инструмента загрузки в фоновом режиме. Этот пример поддерживает одновременную загрузку нескольких файлов;</p>
<p>3. Каталог для загрузки файлов может быть указан произвольно, настройте его в файле web.xml;</p>
<p>4. Загруженные изображения не найдены на этой странице. Эта часть остается за вами. </p>
<p>Подробную информацию об API Uploadify см. на странице http://www.uploadify.com/documentation/</p>.
<p style="color: red">*Если вас заинтересовал этот пример и вы хотите узнать больше, добро пожаловать в сообщество онлайн-обучения Java Private School (329232140). </p>
<input id="fileupload" type="file" name="img" Multiple="multiple"/>
<div id="J_div"></div>
</тело>
</html>
веб.xml
Скопируйте код кода следующим образом:
<?xml версия="1.0" кодировка="UTF-8"?>
<веб-приложение xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http ://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd» Metadata-complete="true" версия="3.0">
<список-приветственных-файлов>
<приветственный-файл>test_upload.html</приветственный-файл>
</приветственный-список-файлов>
<сервлет>
<description>Сервлет, специально разработанный для обработки операций загрузки</description>
<имя-сервлета>FileUploadServlet</имя-сервлета>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<инициализирующий-параметр>
<description>Официальный каталог, в котором хранятся файлы, вы можете настроить его самостоятельно</description>
<param-name>uploadDir</param-name>
<param-value>/upload/images/</param-value>
</инит-парам>
<инициализирующий-параметр>
<description>Временный каталог, в котором хранятся файлы, можно настроить самостоятельно. Файлы в нем будут автоматически удалены прослушивателем, настроенным ниже. </описание>
<param-name>tempUploadDir</param-name>
<param-value>/upload/temp</param-value>
</инит-парам>
</сервлет>
<сопоставление сервлетов>
<имя-сервлета>FileUploadServlet</имя-сервлета>
<url-pattern>/upload</url-pattern>
</сервлет-сопоставление>
<слушатель>
<description>Временная очистка файлового ресурса, инструментарий идет в комплекте, писать нам не нужно</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</слушатель>
</веб-приложение>