Simule um único upload de arquivo de 2 maneiras, o efeito é o seguinte
As etapas de desenvolvimento são as seguintes:
1. Crie um novo projeto web e importe os jars necessários para os arquivos de upload do struts2, conforme mostrado abaixo
Estrutura de diretório
2. Crie uma nova ação
primeira maneira
Copie o código do código da seguinte forma:
pacote com.ljq.action;
importar java.io.File;
importar org.apache.commons.io.FileUtils;
importar org.apache.struts2.ServletActionContext;
importar com.opensymphony.xwork2.ActionContext;
importar com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
classe pública UploadAction estende ActionSupport{
imagem do arquivo privado; //arquivo enviado
private String nomeArquivoimagem; //Nome do arquivo
private String imageContentType; //Tipo de arquivo
public String execute() lança exceção {
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
//D:/apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("caminhoreal: "+caminhoreal);
if (imagem! = nulo) {
Arquivo savefile = new File(new File(realpath), imageFileName);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(imagem, arquivo salvo);
ActionContext.getContext().put("message", "Arquivo enviado com sucesso");
}
retornar "sucesso";
}
Arquivo público getImage() {
imagem de retorno;
}
public void setImage(Imagem do arquivo) {
esta.imagem = imagem;
}
public String getImageFileName() {
return nomeArquivoimagem;
}
public void setImageFileName(String imagemFileName) {
this.imageFileName = imagemFileName;
}
public String getImageContentType() {
retornar imagemContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imagemContentType;
}
}
Segunda via
Copie o código do código da seguinte forma:
pacote com.ljq.action;
importar java.io.File;
importar java.io.FileInputStream;
importar java.io.FileOutputStream;
importar java.io.IOException;
importar org.apache.struts2.ServletActionContext;
importar com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
classe pública UploadAction2 estende ActionSupport {
//Encapsula os atributos do domínio do arquivo enviado
imagem de arquivo privado;
//Encapsula os atributos do tipo de arquivo enviado
string privada imageContentType;
//Encapsula os atributos do nome do arquivo enviado
private String nomeArquivoimagem;
//Aceita propriedades de injeção de dependência
string privada savePath;
@Substituir
string pública execute() {
FileOutputStream fos = null;
FileInputStream fis = null;
tentar {
//Cria fluxo de saída do arquivo
System.out.println(getSavePath());
fos = new FileOutputStream(getSavePath() + "//" + getImageFileName());
//Cria um fluxo de upload de arquivo
fis = new FileInputStream(getImage());
byte[] buffer = novo byte[1024];
int len=0;
enquanto ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (Exceção e) {
System.out.println("Falha no upload do arquivo");
e.printStackTrace();
} finalmente {
fechar(fos, fis);
}
retornar SUCESSO;
}
/**
* Retorne ao local de salvamento do arquivo enviado
*
* @retornar
*/
public String getSavePath() lança exceção{
retornar ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
Arquivo público getImage() {
imagem de retorno;
}
public void setImage(Imagem do arquivo) {
esta.imagem = imagem;
}
public String getImageContentType() {
retornar imagemContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imagemContentType;
}
public String getImageFileName() {
return nomeArquivoimagem;
}
public void setImageFileName(String imagemFileName) {
this.imageFileName = imagemFileName;
}
private void close(FileOutputStream fos, FileInputStream fis) {
if (fis! = nulo) {
tentar {
fis.close();
} catch (IOException e) {
System.out.println("FileInputStream falhou ao fechar");
e.printStackTrace();
}
}
if (fos! = nulo) {
tentar {
fos.close();
} catch (IOException e) {
System.out.println("FileOutputStream falhou ao fechar");
e.printStackTrace();
}
}
}
}
arquivo de configuração struts.xml
Copie o código do código da seguinte forma:
<?xml versão="1.0" codificação="UTF-8" ?>
<!DOCTYPE suporta PUBLIC
"-//Apache Software Foundation//Configuração do DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<suportes>
<!-- Este atributo especifica o sufixo da solicitação que precisa ser processado pelo Struts2. O valor padrão deste atributo é action, ou seja, todas as solicitações correspondentes a *.action são processadas pelo Struts2.
Se o usuário precisar especificar vários sufixos de solicitação, separe os vários sufixos com vírgulas (,). -->
<constant name="struts.action.extension" value="do" />
<!-- Defina se o navegador armazena conteúdo estático em cache. O valor padrão é verdadeiro (usado no ambiente de produção. É melhor desligá-lo durante o estágio de desenvolvimento).
<constant name="struts.serve.static.browserCache" value="false" />
<!-- Quando o arquivo de configuração do struts é modificado, se o sistema recarregará automaticamente o arquivo, o valor padrão é falso (usado no ambiente de produção), é melhor ativá-lo durante o estágio de desenvolvimento -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- Usado no modo de desenvolvimento, para que mensagens de erro mais detalhadas possam ser impressas -->
<constant name="struts.devMode" value="true" />
<!--Tema de visualização padrão-->
<constant name="struts.ui.theme" value="simple" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--Solução para códigos ilegíveis-->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- Especifique o número máximo de bytes permitidos para arquivos carregados. O valor padrão é 2097152(2M) -->
<constante nome="struts.multipart.maxSize" valor="10701096"/>
<!-- Defina a pasta temporária para arquivos carregados, javax.servlet.context.tempdir é usado por padrão -->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<nome do pacote="upload" namespace="/upload" extends="struts-default">
<action name="*_upload" método="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</pacote>
<nome do pacote="upload2" extends="struts-default">
<nome da ação="upload2" método="executar">
<!-- Defina dinamicamente o valor do atributo de savePath -->
<param name="savePath">/imagens</param>
<result name="success">/WEB-INF/page/message.jsp</result>
<result name="input">/upload/upload.jsp</result>
<interceptor-ref name="fileUpload">
<!-- Filtragem de arquivos -->
<param name="allowedTypes">imagem/bmp,imagem/png,imagem/gif,imagem/jpeg</param>
<!-- Tamanho do arquivo, em bytes -->
<param name="maximumSize">1025956</param>
</interceptor-ref>
<!-- O interceptor padrão deve ser colocado após fileUpload, caso contrário será inválido -->
<interceptor-ref name="defaultStack" />
</action>
</pacote>
</struts>
Carregar página do formulário
Copie o código do código da seguinte forma:
<%@page idioma="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<cabeça>
<title>Envio de arquivo</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<corpo>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
<form action="${pageContext.request.contextPath}/upload2/upload2.do"
enctype="multipart/form-data" method="post">
Arquivo:<input type="file" name="image">
<input type="submit" value="Upload" />
</form>
<br/>
<s:fielderror />
</body>
</html>
Mostrar página de resultados
Copie o código do código da seguinte forma:
<%@ page idioma="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<cabeça>
<title>Envio realizado com sucesso</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<corpo>
Carregamento bem-sucedido!
<br/><br/>
<!-- ${pageContext.request.contextPath} caminho de implantação do Tomcat,
Por exemplo: D:/apache-tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:depurar></s:depurar>
</body>
</html>