Struts2上传图片和注意事项
1.必须有拦截器:
(1).可放在公共拦截器中 <interceptor-ref name="fileUpload"/> (2).可放在action中 <!-- 配置名字为fileUpload的拦截器 --> <interceptor-ref name="fileUpload"> <!-- 配置允许上传的文件类型 --> <param name="allowedTypes">image/bmp,image/png,image/gif, image/jpeg,image/pjpeg,image/x-png</param> <!-- 配置允许上传文件的大小(单位字节) --> <param name="maximumSize">104857600</param> </interceptor-ref> <!-- defaultStack必须配置在fileUpload后面 --> <interceptor-ref name="defaultStack"></interceptor-ref>
2.修改限制的大小:
<constant name="struts.multipart.maxSize" value="10485760" /> 或 struts.multipart.maxSize=104857600
注:不用改的地方:
struts.multipart.parser=jakarta struts.multipart.saveDir=??
3.页面的form中需要加:
enctype="multipart/form-data"
4.页面的上传域如下:(注意name属性)
<input type="file" name="image" />
5.action中必须加的属性:(注意添加set/get方法)
private File image; // 上传图片获取的File对象
private String imageFileName; //上传图片获取的图片名字
private String imageContentType; //上传图片获取的图片类型
上传工具类:
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.util.Calendar;
public class UploadFileUtil {
/**
* 上传图片的方法
* @param imageFile // 上传图片获取的File对象
* @param imageName //上传图片获取的图片名字
* @return
* @throws IOException
*/
public static String uploadImage(File imageFile, String imageName ) throws IOException {
int random = (int)(Math.random()*900)+100;
/*创建输入流*/
InputStream is = new FileInputStream(imageFile);
/*设置上传目录*/
String path = "G:\\resource";
Calendar cal=Calendar.getInstance();
String imageUrlPath = "images" + File.separator + cal.get(Calendar.YEAR) + File.separator + (cal.get(Calendar.MONTH)+1) + File.separator
+ cal.get(Calendar.DAY_OF_MONTH);
String imagePath = path + File.separator + imageUrlPath;
File file = new File(imagePath);
if (!file.exists()) {
file.mkdirs();
}
/*设置目标文件*/
String targetImageName = "" + cal.get(Calendar.HOUR) + cal.get(Calendar.MINUTE) + cal.get(Calendar.SECOND)
+ cal.get(Calendar.MILLISECOND) + random + imageName.substring(imageName.indexOf("."));
File target = new File(imagePath + File.separator + targetImageName);
/*创建输出流*/
OutputStream os = new FileOutputStream(target);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
is.close();
os.close();
return imageUrlPath + File.separator + targetImageName;
}
}
参考: