因为没理解servlet为什么要用struts2取代而耗费了很多时间在找如何获取前端传输过来的数据。
servlet中的doGet()与doPost()方法在用到时有很多参数如
public void doPost(HttpServletRequest request,HttpServletResponse esponse) throws IOException,ServletException而转为struts2时,struts2给我们处理了。
所以你需要在Action中定义他们,而且要和前端对应。
前端
<form name="uploadImages" method="POST" action="uploadImages.action" enctype="multipart/form-data">
<div class="form-group">
<label for="photo">文件</label>
<input name="photo" size="40" type="file" id="appImage">
</div>
<div class="form-group">
<p>温馨提示:上传文件</p>
</div>
<div class="form-group">
<input name="upload" type="submit" class="btn btn-success" value="上传文件">
</div>
</form>
Action
package nwpu.precisefunds.compare.dao;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.struts2.ServletActionContext;
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
import com.opensymphony.xwork2.ActionSupport;
import nwpu.precisefunds.applicant.service.ApplicantService;
import nwpu.precisefunds.photo.service.ImageService;
import nwpu.precisefunds.photo.vo.Image;
public class UploadImagesAction extends ActionSupport implements Serializable {
private static final int BUFFER_SIZE = 16 * 1024;
private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; // 3MB
private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB
private File photo;
private String photoContentType;
private String photoFileName;
private String destPath;
public File getPhoto() {
return photo;
}
public void setPhoto(File photo) {
this.photo = photo;
}
public String getPhotoContentType() {
return photoContentType;
}
public void setPhotoContentType(String photoContentType) {
this.photoContentType = photoContentType;
}
public String getPhotoFileName() {
return photoFileName;
}
public void setPhotoFileName(String photoFileName) {
this.photoFileName = photoFileName;
}
public String getDestPath() {
return destPath;
}
public void setDestPath(String destPath) {
this.destPath = destPath;
}
private String newFileName;
public String getNewFileName() {
return newFileName;
}
public void setNewFileName(String newFileName) {
this.newFileName = newFileName;
}
private ImageService imageService;
public ImageService getImageService() {
return imageService;
}
public void setImageService(ImageService imageService) {
this.imageService = imageService;
}
private ApplicantService applicantService;
public void setApplicantService(ApplicantService applicantService) {
this.applicantService = applicantService;
}
public String execute() throws SocketException, IOException {
HttpServletRequest request = ServletActionContext.getRequest();
//http://blog.163.com/lfsyhuangaigang@126/blog/static/77436670201332303122315/
//https://www.cnblogs.com/qinglangyijiu/p/7803818.html
FTPClient fc = new FTPClient();
int reply=0;
String hostName = "192.168.2.1";//服务器ip地址
String ftpUser = "ftptest";//ftp用户名
String ftpPass = "123456";//ftp密码
int port = 9091;//端口
fc.connect(hostName, port);
fc.login(ftpUser, ftpPass);
reply = fc.getReplyCode();
FTPReply.isPositiveCompletion(reply);
//System.out.println(reply+"是不是230呀");
if((FTPReply.isPositiveCompletion(reply))){
System.out.println("连接成功");
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 取当前日期作为文件夹
SimpleDateFormat cs = new SimpleDateFormat("yyyy");
String dateCs = cs.format(new Date());
System.out.println("文件夹格式为:"+dateCs);
String dateFile = sdf.format(new Date());
// System.out.println("格式化后的date:"+dateFile);
// 生成随机文件名
String fileName = UUID.randomUUID() + ".jpg";
System.out.println("文件名:" + fileName);
// 拼接上传的路径
String uploadPath = "uploadImage/" + dateFile + "/" + fileName;
System.out.println("上传的路径:"+uploadPath);
// 创建文件夹 必须一层一层创建
fc.makeDirectory("uploadImage");
fc.makeDirectory("uploadImage" + "/" + dateFile);
//https://www.cnblogs.com/kongxianghao/articles/6879367.html
//File f= new File("f:" + File.separator + "a.jpg");
InputStream input = new FileInputStream(getPhoto());
if (!(fc.changeWorkingDirectory(uploadPath))) {
fc.setFileType(FTPClient.BINARY_FILE_TYPE);
if (fc.storeFile(uploadPath, input)) {
// 上传成功将数据存到数据库
System.out.println("上传成功了?????????????");
Image img = new Image();// 需要补充内容
img.setImageTag("imageTag");
img.setXh("xh");
img.setImageUrl(uploadPath);
//int row = imageService.updateImage("xh", "imageTag", img);
}
request.getInputStream().close();
fc.logout();
}
return SUCCESS;
}
}
以上基本是主要的,
struts2.xml配置struts2
<action name="uploadImages" class="uploadImagesAction" method="execute">
<result name ="success">/WEB-INF/jsp/user.jsp</result>
</action>
applicationContext.xml配置Spring
<bean id="uploadImagesAction" class="nwpu.precisefunds.compare.dao.UploadImagesAction"
scope="prototype">
<property name="applicantService" ref="applicantService" /><!--没有用到-->
</bean>
只是我的理解,本文章只作个人工作记录,希望不要误导后来人。
有些内容没有用到,等过几天再改一下,会添加用户的数据库内容。