Click me to download the project code Due to project requirements, asynchronous upload of files needs to be used when processing file uploads. The download address of the Jquery Ajax File Uploader component is used here: http://www.phpletter.com/download_project_version.php?version_id=6
The server uses struts2 to handle file uploads.
Required environment:
jquery.js
ajaxfileupload.js
The jar package that struts2 depends on
and struts2-json-plugin-2.1.8.1.jar
Writing file upload Action
package com.ajaxfile.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class FileAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileFileContentType;
private String message = "You have File uploaded successfully";
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileFileContentType() {
return fileFileContentType;
}
public void setFileFileContentType(String fileFileContentType) {
this.fileFileContentType = fileFileContentType;
}
@SuppressWarnings("deprecation")
@Override
public String execute() throws Exception {
String path = ServletActionContext.getRequest().getRealPath("/upload");
try {
File f = this.getFile();
if(this.getFileFileName() .endsWith(".exe")){
message="Sorry, the file format you uploaded is not allowed!!!";
return ERROR;
}
FileInputStream inputStream = new FileInputStream(f );
FileOutputStream outputStream = new FileOutputStream(path "/" this.getFileFileName());
byte[] buf = new byte[1024];
int length = 0;
while (( length = inputStream.read(buf)) != -1) {
outputStream.write(buf, 0, length);
}
inputStream.close();
outputStream.flush() ;
} catch (Exception e) {
e.printStackTrace();
message = "Sorry, file upload failed!!!!";
}
return SUCCESS;
}
}
struts.xml
text/html
text/html
< /struts>
Pay attention to the configuration of result in struts.xml in combination with Action.
The contentType parameter must be present, otherwise the browser will always prompt to save the returned JSON result as a file and will not hand it over to ajaxfileupload for processing. This is because the default contentType of struts2 JSON Plugin is application/json, while ajaxfileupload requires text/html.
JSP page for file upload
Pay attention
Click here to download the project code