Na seção anterior, concluímos as funções de adicionar e atualizar produtos. Essas duas partes envolvem o upload de imagens do produto e não há explicação detalhada. Para esse fim, este artigo apresenta a função do STRUTS2 para implementar o upload de arquivos.
1. Encapsular informações do arquivo
Primeiro, precisamos ter um modelo para encapsular as informações do arquivo. Este modelo precisa de três atributos: arquivo, tipo de arquivo e nome do arquivo. Para a imagem que queremos passar, criamos um novo modelo da seguinte maneira:
classe pública FileImage {arquivo privado de arquivo; Private String contentType; nome do arquivo de string privado; public arquivo getfile () {return file; } public string getContentType () {return contentType; } public string getFilename () {return filename; } public void setupLoad (arquivo de arquivo) {// O método SET não pode ser o mesmo que o nome do atributo, mas os parâmetros quando passados do primeiro plano deve ser o mesmo que o nome do método definido. Isto é, o parâmetro passado em primeiro plano é o FileImage.UPLOAD this.File = FILE; } public void setupLoadContentType (String contentType) {this.contentType = contentType; } public void se setupLoadFileName (string filename) {this.filename = filename; }}Dessa forma, o modelo está escrito. Considerando que a lógica do upload de arquivo não é exclusiva de uma única ação, escrevemos a lógica do upload de arquivo na classe de ferramentas, para que todas as chamadas de ação possam ser feitas. Por isso, criamos uma nova classe de ferramentas de upload de arquivos (para programação de interface, também extraímos a interface da classe de ferramentas):
2. Complete a classe de ferramenta de upload de arquivo
// Ferramenta de upload de arquivo Interface interface pública interface fileUpload {// Implemente a função do upload do arquivo, retorne o novo nome do arquivo após o upload public abstrate string uploadfile (fileImage fileImage); } // Ferramenta de upload de arquivos Implementação específica @component ("fileUpload") classe pública FileUploadutil implementa o arquivo FileUpload {private string filepath; @Value ("#{prop.filepath}") //@valor significa encontrar o feijão com id = "prop" no arquivo beans.xml. Ele lê o arquivo de configuração de propriedades através da anotação e depois lê o valor de key = filepath no arquivo de configuração correspondente public void setFilePath (string filepath) {System.out.println (filepath); this.FilePath = filepath; } // 1. Obtenha a extensão Private String getFileExt (string filename) {return filenameutils.geTextension (nome do arquivo); } // 2. Gerar um número UUID aleatório como o novo nome do arquivo Private String newFileName (string filename) {string ext = getFileExt (nome do arquivo); Retorne uuid.randomuuid (). ToString () + "." + ext; } // Implementar a função do upload do arquivo, retorne o novo nome do arquivo após o upload @Override public String UPLOPLEFILE (FileImage FileImage) {// Obtenha o novo nome de arquivo exclusivo String pic = newFileName (FileImage.getFileName ()); tente {fileutil.copyfile (fileImage.getfile (), novo arquivo (filepath, pic)); // O primeiro parâmetro é o arquivo carregado, e o segundo parâmetro é copiar o arquivo para o novo PAT Return Pic; } catch (Exceção e) {lança nova RunTimeException (e); } finalmente {FileImage.getFile (). Delete (); }}}Há uma anotação @Value acima, que é obter o caminho para o qual o arquivo deve ser armazenado no arquivo de propriedades. Para detalhes, consulte: Spring para obter informações do arquivo de configuração.
3. Injetar classes de arquivos encapsuladas e classes de ferramentas em ação
Depois de escrever a classe de encapsulamento de arquivos e a classe de ferramentas de upload de arquivos, precisamos injetar esses dois objetos em nossa ação, para que a função de upload de arquivos possa ser implementada na ação:
@Controller ("Baseaction") @Scope ("Prototype") Public Class Baseaction <T> estende o ACTIÇOPPORT IMPLEMPENDO O PELLINGAWARE, SESSIGNARECE, ApplicationAlare, Modeldriven <T> {// FileImage Protected FileImage; // Carregar a classe de ferramenta de arquivo @Resource Protected FileUpload fileUpload; public fileImage getFileImage () {return fileImage; } public void setFileImage (FileImage FileImage) {this.fileImage = FileImage; } // omita outro código irrelevante ...} 4. Implementar o upload do arquivo
Ok, agora podemos implementar o upload de arquivos no Production. Se a classe de ferramentas for gravada, a quantidade de código na ação será muito pequena, o que também é a vantagem trazida pelo encapsulamento.
@Controller ("Production") @Scope ("prototype") classe pública ProductAction estende o Baseaction <Product> {// omiti outro código irrelevante ... public void save () lança exceção {// a classe FileUpload é extraída, o uploadFile FileFile aceita um objeto de arquivo e retorna o nome da imagem strack Model.Setpic (PIC); Model.SetDate (new Date ()); System.out.println (modelo); // As informações do produto são armazenadas no ProductService.Save (Model); } public void update () {string pic = fileUpload.uploadfile (fileImage); Model.Setpic (PIC); Model.SetDate (new Date ()); System.out.println (modelo); // Atualize o produto ProductService.Update (Model); }}Dessa forma, concluímos a função de fazer upload de arquivos da recepção.
Endereço original: http://blog.csdn.net/eson_15/article/details/51366384
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.