Пример загрузки файла в Struts
В этом руководстве вы узнаете, как загрузить файл в файловую систему сервера с тегом Struts<html:file>.
Загрузите этот пример загрузки файла Struts -Struts-FileUpload-Example.zip
1. Форма действия
В форме действия создайте переменнуюorg.apache.struts.upload.FormFile для хранения загруженного файла, а также проверку формы для загруженного файла.
package com.example.common.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.upload.FormFile; public class FileUploadForm extends ActionForm{ private FormFile file; public FormFile getFile() { return file; } public void setFile(FormFile file) { this.file = file; } @Override public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if( getFile().getFileSize()== 0){ errors.add("common.file.err", new ActionMessage("error.common.file.required")); return errors; } //only allow textfile to upload if(!"text/plain".equals(getFile().getContentType())){ errors.add("common.file.err.ext", new ActionMessage("error.common.file.textfile.only")); return errors; } //file size cant larger than 10kb System.out.println(getFile().getFileSize()); if(getFile().getFileSize() > 10240){ //10kb errors.add("common.file.err.size", new ActionMessage("error.common.file.size.limit", 10240)); return errors; } return errors; } }
2. действие
В классе Action просто получите загруженный файл и сохраните его в файловой системе сервера, а затем сохраните вновь созданные сведения о файле в сеанс для последующего использования.
package com.example.common.action; import java.io.File; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; import com.example.common.form.FileUploadForm; public class FileUploadAction extends Action{ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FileUploadForm fileUploadForm = (FileUploadForm)form; FormFile file = fileUploadForm.getFile(); //Get the servers upload directory real path name String filePath = getServlet().getServletContext().getRealPath("/") +"upload"; //create the upload folder if not exists File folder = new File(filePath); if(!folder.exists()){ folder.mkdir(); } String fileName = file.getFileName(); if(!("").equals(fileName)){ System.out.println("Server path:" +filePath); File newFile = new File(filePath, fileName); if(!newFile.exists()){ FileOutputStream fos = new FileOutputStream(newFile); fos.write(file.getFileData()); fos.flush(); fos.close(); } request.setAttribute("uploadedFilePath",newFile.getAbsoluteFile()); request.setAttribute("uploadedFileName",newFile.getName()); } return mapping.findForward("success"); } }
3. JSP
Вы должны установить тип кодирования тега<html:form> на «multipart/form-data» и указать метод HTTP как «post».
fileupload.jsp
+ : + +
display.jsp
File uploaded to : "> Click here to download it
4. struts-config.xml
Связать все вместе
Попробуй это
http://localhost:8080/StrutsExample/UploadPage.do
Выберите файл и нажмите кнопку отправки.
http://localhost:8080/StrutsExample/Upload.do
Будет перенаправлен на display.jsp и отобразится информация о загруженном файле.