exemplo de upload de arquivo assíncrono jQuery Uploadify + Apache Fileupload
1. Você pode limitar o tamanho e o tipo dos arquivos enviados. Em teoria, qualquer tipo de arquivo pode ser carregado (você pode configurá-lo de acordo com a API);
2. Apache commons-fileupload-1.3.1.jar é usado como kit de ferramentas de upload em segundo plano. Este exemplo oferece suporte a vários uploads de arquivos ao mesmo tempo;
3. O diretório de upload do arquivo pode ser especificado arbitrariamente, configure-o em web.xml;
Para obter detalhes sobre a API Uploadify, consulte http://www.uploadify.com/documentation/
FileUploadServlet
Copie o código do código da seguinte forma:
pacote com.xiaoxing.upload;
importar java.io.File;
importar java.io.IOException;
importar java.io.PrintWriter;
importar java.io.UnsupportedEncodingException;
importar java.text.SimpleDateFormat;
importar java.util.Date;
importar java.util.Iterator;
importar java.util.List;
importar java.util.UUID;
importar javax.servlet.ServletException;
importar javax.servlet.http.HttpServlet;
importar javax.servlet.http.HttpServletRequest;
importar javax.servlet.http.HttpServletResponse;
importar org.apache.commons.fileupload.FileItem;
importar org.apache.commons.fileupload.disk.DiskFileItemFactory;
importar org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* <h1>Upload do arquivo Apache Fileupload (3/5/2014)</h1>
* <p>1. Se você estiver interessado neste exemplo e quiser saber mais, seja bem-vindo à comunidade de aprendizagem on-line da Java Private School (329232140)</p>
* <p>2. Este exemplo pode ser transplantado para o seu projeto real com pequenas modificações. </p>
*/
classe pública FileUploadServlet estende HttpServlet {
privado estático final longo serialVersionUID = 7579265950932321867L;
//Defina o diretório de upload de arquivo padrão (se você não o configurou em web.xml)
private String uploadDir = "c:/"; //Diretório de upload de arquivo
private String tempUploadDir = "c:/"; // O diretório onde os arquivos são armazenados temporariamente (excluídos automaticamente pelo ouvinte após a destruição da sessão)
/*
* (não Javadoc)
* @veja javax.servlet.GenericServlet#init()
* Se o diretório de upload do arquivo estiver configurado em web.xml, ele será usado primeiro para determinar se o diretório do arquivo existe. Se não existir, crie-o.
*/
@Substituir
public void init() lança ServletException {
// Obtém o diretório real do disco rígido onde este projeto está localizado
Caminho da string = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
caminho = caminho.substring(0, caminho.indexOf("WEB-INF"));
// Determina se o alvo existe, cria-o se não existir
String uploadDir = path.concat(this.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
Arquivo f_uploadDir = novo arquivo(uploadDir);
Arquivo f_tempUploadDir = novo arquivo(tempUploadDir);
if (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
if (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
//Atribuir valor à variável
this.uploadDir = uploadDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (não Javadoc)
* @veja javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Não aceite dados enviados pelo método get e retorne o código de status de falha de upload.
*/
@Substituir
protegido void doGet (solicitação HttpServletRequest, resposta HttpServletResponse) lança ServletException, IOException {
this.setResponse(resposta);
PrintWriter out = resposta.getWriter();
out.print("{/"error/":/"-1/""); // Método de envio ilegal
}
/*
* (não Javadoc)
* @ver javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* As solicitações de upload de arquivos geralmente são enviadas via POST
*/
@Substituir
protegido void doPost (solicitação HttpServletRequest, resposta HttpServletResponse) lança ServletException, IOException {
this.setResponse(response); //Definir o tipo de resposta para análise front-end
PrintWriter out = resposta.getWriter();
Resultado da string = "";
tentar {
// Verifica se esta é uma solicitação de upload de arquivo
booleano isMultipart = ServletFileUpload.isMultipartContent(solicitação);
if (éMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory(); // Cria um item de arquivo baseado em disco de fábrica
factory.setRepository(new File(tempUploadDir)); // Configure o repositório (ao garantir um local temporário seguro)
ServletFileUpload upload = new ServletFileUpload(factory); // Cria um novo manipulador de upload de arquivo
upload.setSizeMax(1024 * 1024 * 100); // Defina o limite geral de tamanho necessário (é recomendado definir o front e o backend separadamente, porque plug-ins diferentes são usados no front e no backend)
List<FileItem> items = upload.parseRequest(request); // Analisar a solicitação
Iterator<FileItem> iter = items.iterator(); // Processa itens carregados
while (iter.hasNext()) { //Se vários arquivos forem carregados de uma vez, eles serão salvos separadamente aqui.
itemFileItem = iter.next();
if (!item.isFormField()) { // Filtre campos que não sejam de tipo de arquivo no formulário
if (!"".equals(item.getName())) { // Filtra a entrada do tipo que não é de arquivo
String s_name = item.getName(); // Obtém o nome do arquivo original
posição int = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length());
String data = new SimpleDateFormat("aaaaMMdd").format(new Date());
String s = uploadDir.concat("/").concat(data).concat("/");
//Salve os arquivos nos diretórios por data aqui
Arquivo sf = novo(s) arquivo(s);
if (!sf.exists()) {
sf.mkdirs();
}
String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
Caminho do arquivo = novo arquivo(s_filePath);
item.write(caminho);
resultado += s_filePath.concat(",");
} outro {
resultado = "";
quebrar;
}
}
}
} outro {
resultado = "";
}
String s_resultJSON = this.jointJSON(result); // A emenda retorna JSON de front-end
out.print(s_resultJSON);
} catch (Exceção e) {
e.printStackTrace();
} finalmente {
fora.flush();
out.close();
}
}
/**
* Divida JSON e retorne o nome do arquivo e o diretório de data do arquivo salvo para o front-end (o front-end pode precisar desse caminho para concluir outras operações do formulário, como armazenar o caminho do arquivo no banco de dados)
* @param string de formato JSON do resultado
* @retornar
* @throws UnsupportedEncodingException
*/
private String jointJSON (resultado da string) lança UnsupportedEncodingException {
Stringstr = "";
if(!"".equals(resultado)) {
String rs[] = resultado.split(",");
Buffer StringBuffer = new StringBuffer("{/"linhas/":[");
for (int i = 0; i < rs.length; i++) {
String s_tmpName = rs[i];
s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
buffer.append("{/"name/":/"").append(s_tmpName).append("/"},");
}
str = buffer.toString();
str = str.substring(0, str.length() - 1).concat("]}");
} outro {
str = "{/"error/":/"-2/"";
}
retornar string;
}
/**
* Defina o tipo de resposta ContentType como "application/x-json"
* @param resposta
*/
private void setResponse(resposta HttpServletResponse) {
resposta.setCharacterEncoding("UTF-8");
resposta.setContentType("aplicativo/json;charset=UTF-8");
response.setHeader("controle de cache", "sem cache");
}
}
test_upload.html
Copie o código do código da seguinte forma:
<!DOCTYPEhtml>
<html>
<cabeça>
<meta charset="UTF-8">
<title>exemplo de upload assíncrono de arquivo jQuery Uploadify + Apache Fileupload (3/5/2014)</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>
<script type="texto/javascript">
$(função(){
$('#fileupload').uploadify({
'método': 'postagem',
'buttonText': 'arquivo de upload flash',
'fileSizeLimit': '1024 KB',
'fileTypeExts': '*.gif; *.jpg;
'swf': '/js/uploadify/uploadify.swf',
'uploader' : '/upload', //Este é o caminho para fazer upload de imagens, que é o servlet que configurei em web.xml
'onUploadSuccess' : function(file, data, response) { //Os dados retornados após o upload da imagem com sucesso são processados aqui
var ary = eval("(" + dados + ")").linhas;
for(var i = 0; i < ary.length; i++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' largura='200px' altura='200px'>");
}
}
});
});
</script>
</head>
<corpo>
<h2>Exemplo de upload assíncrono de arquivo jQuery Uploadify + Apache Fileupload (3/5/2014)</h2>
<p>1. Você pode limitar o tamanho e o tipo dos arquivos enviados. Em teoria, qualquer tipo de arquivo pode ser carregado (você pode configurá-lo de acordo com a API);</p>
<p>2. Apache commons-fileupload-1.3.1.jar é usado como kit de ferramentas de upload em segundo plano. Este exemplo suporta vários uploads de arquivos ao mesmo tempo;</p>
<p>3. O diretório de upload do arquivo pode ser especificado arbitrariamente, configure-o em web.xml;</p>
<p>4. As fotos enviadas não são encontradas nesta página. Esta parte é deixada para você. </p>
<p>Para obter detalhes sobre a API Uploadify, consulte http://www.uploadify.com/documentation/</p>
<p style="color: red">*Se você estiver interessado neste exemplo e quiser saber mais, seja bem-vindo à comunidade de aprendizagem on-line da Java Private School (329232140). </p>
<input id="fileupload" type="file" name="img" multiple="multiple"/>
<div id="J_div"></div>
</body>
</html>
web.xml
Copie o código do código da seguinte forma:
<?xml versão="1.0" codificação="UTF-8"?>
<web-app 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" versão="3.0">
<lista de arquivos de boas-vindas>
<welcome-file>test_upload.html</welcome-file>
</welcome-file-list>
<servlet>
<description>Um servlet projetado especificamente para lidar com operações de upload</description>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<parâmetro de inicialização>
<description>O diretório oficial onde os arquivos são armazenados, você mesmo pode configurá-lo</description>
<param-name>uploadDir</param-name>
<param-value>/upload/images/</param-value>
</init-param>
<parâmetro de inicialização>
<descrição>O diretório temporário onde os arquivos são armazenados pode ser configurado por você mesmo. Os arquivos nele contidos serão excluídos automaticamente pelo ouvinte configurado abaixo. </descrição>
<param-name>tempUploadDir</param-name>
<param-value>/upload/temp</param-value>
</init-param>
</servlet>
<mapeamento de servlet>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<ouvinte>
<description>Limpeza temporária de recursos de arquivos, o kit de ferramentas vem com ele, não precisamos escrevê-lo</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</ouvinte>
</web-app>