Struts2文件上传
1.表单数据的编码方式
- application/x-www-form-urlencoded。这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。
- multipart/form-data。采用这种编码方式的表单会以二进制流的方式来处理表单数据,将文件域指定文件的内容也封装到请求参数中。
- text/plain。当表单的action属性值为mailto:URL的形式时,这种编码方式比较方便,它主要适用于直接通过表单发送邮件。
如果想进行文件的上传,那么应将表单的enctype属性设置为multipart/form-data,值得注意的是,一旦表单采用这种形式进行封装,那么将无法直接用HttpServletRequest对象的getParameter()方法取得请求参数值。
2.Struts2中实现文件上传
- 新建upload.jsp页面,定义上传表单并进行封装。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="UTF-8" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="UploadAction!test.action" method="post" enctype="multipart/form-data">
<label>上传者:</label><input type="text" name="name" /><br>
<label>请选择图片:</label><input type="file" id="image" name="image" /><hr>
<input type="submit" value="上传" />
</form>
</body>
</html>
- 新建FileUploadUtil类,专门进行上传数据的处理操作
import java.io.*;
import java.util.UUID;
public class FileUploadUtil {
private File file;
private String fileType;
private String fileName;
public FileUploadUtil(File file,String fileType){
this.file = file;
this.fileType = fileType;
}
public String getFileName(){
if(this.fileName==null||"".equals(this.fileName.trim())){
String fileExt = null;
switch(this.fileType){
case "image/tiff":{
fileExt = "tiff";break;
}
case "image/png":{
fileExt = "png";break;
}
case "image/jpeg":{
fileExt = "jpeg";break;
}
case "image/jpg":{
fileExt = "jpg";break;
}
default:break;
}
this.fileName = UUID.randomUUID()+"."+fileExt;
}
return this.fileName;
}
public boolean saveFile(String outFilePath) throws IOException {
File saveFile = new File(outFilePath);
InputStream input = null;
OutputStream output = null;
try{
if(!saveFile.getParentFile().exists()){
saveFile.getParentFile().mkdirs();
}
input = new FileInputStream(this.file);
output = new FileOutputStream(saveFile);
byte[] temp = new byte[2048];
int len = 0;
while((len=input.read(temp))!=-1){
output.write(temp,0,len);
}
return true;
}catch(IOException e){
throw e;
}finally{
if(input!=null){
input.close();
}
if(output!=null){
output.close();
}
}
}
public boolean deleteFile(String filePath){
File deleteFile = new File(filePath);
if(!deleteFile.exists()){
deleteFile.delete();
return true;
}
return false;
}
}
- 新建UploadAction类,进行上传数据的处理
import com.bank.util.FileUploadUtil;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.*;
import java.io.File;
import java.io.IOException;
@SuppressWarnings("serial")
@ParentPackage(value="root")
@Namespace(value="/pages/upload")
@Action(value="UploadAction")
public class UploadAction extends ActionSupport {
private String name;
private File image;
private String imageFileName;
private String imageContentType;
public void test(){
FileUploadUtil fuu = new FileUploadUtil(this.image,this.imageContentType);
String newFileName = fuu.getFileName();
String saveFilePath = ServletActionContext.getServletContext().getRealPath("/upload/"+newFileName);
System.out.println(saveFilePath);
try {
fuu.saveFile(saveFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}