【Struts2】文件的上传与上传权限的控制
2015-06-06 14:55
477 查看
package test;
//用到了输入流,必须的支持
import java.io.*;
//这个是为了取出Upload这个文件夹的绝对路径
import org.apache.struts2.ServletActionContext;
//这是Struts2必要的支持
import com.opensymphony.xwork2.ActionSupport;
//防止报序列号警告
@SuppressWarnings("serial")
//Struts2必须继承这个类
public class upload extends ActionSupport {
//上传文件Action固有的两个属性fileContentType不是必须的
//但一定要设置好getter与setter,这是Struts2固有的特点。
//设置完getter与setter一定不可以在执行方法中再次初始化,如String xx=
//这样前台会取不值的!
private File file;
private String fileFileName;
//saveFileName是保存到服务器的名字
//利用传来过的文件的后缀名+时间戳构造,
//必要时还可以补上用户名
private String saveFileName;
//这是文件的大小,主要是为了传到前台
private String fileLength;
private String errMsg;
//防止输入输出流报警告
@SuppressWarnings("resource")
public String run() throws Exception {
//对错误信息字符串赋予""值,否则会返回前台一个null
errMsg = "";
//判断是否符合上传的条件
boolean canUpload = true;
//取出Upload的绝对路径
String saveFilePath = ServletActionContext.getServletContext()
.getRealPath("/Upload");
//取出上传文件的后缀名
String fileExtensions = getFileFileName().substring(
getFileFileName().lastIndexOf("."));
//根据后缀名判断是否能上传
if (!(fileExtensions.equals(".gif") || fileExtensions.equals(".png")
|| fileExtensions.equals(".jpeg")
|| fileExtensions.equals(".jpg") || fileExtensions
.equals(".bmp"))) {
errMsg += "上传文件只能是图片,后缀名必须是bmp,gif,jpg,jpeg!";
canUpload = false;
}
//根据文件大小判断是否能上传
if (file.length() > (2 * 1024 * 1024)) {
errMsg += "上传文件太大,请少于2M!";
canUpload = false;
}
//把文件大小转化成字符串,推回给前台
fileLength = (file.length() / 1024) + "KB";
//如果可以上传
if (canUpload) {
//就营造一个服务器上的文件名
saveFileName = System.currentTimeMillis() + fileExtensions;
//输出流是保存到服务器的输出流
FileOutputStream fos = new FileOutputStream(saveFilePath + "/"
+ saveFileName);
//输入流就是传过来的文件
FileInputStream fis = new FileInputStream(getFile());
//缓冲数组
byte[] buffer = new byte[1024];
int len = 0;
//输入流不停读东西到缓冲数组,直到读完
while ((len = fis.read(buffer)) > 0) {
//输出流不停把缓冲数组的东西的东西写到服务器上Upload的绝对目录上面
fos.write(buffer, 0, len);
}
//返回struts.xml一个成功结果
return "success";
} else {
return "error";
}
}
//所有静态成员必须有getter与setter,否则不能与前台交互
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 getSaveFileName() {
return saveFileName;
}
public void setSaveFileName(String saveFileName) {
this.saveFileName = saveFileName;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public String getFileLength() {
return fileLength;
}
public void setFileLength(String fileLength) {
this.fileLength = fileLength;
}
}
//用到了输入流,必须的支持
import java.io.*;
//这个是为了取出Upload这个文件夹的绝对路径
import org.apache.struts2.ServletActionContext;
//这是Struts2必要的支持
import com.opensymphony.xwork2.ActionSupport;
//防止报序列号警告
@SuppressWarnings("serial")
//Struts2必须继承这个类
public class upload extends ActionSupport {
//上传文件Action固有的两个属性fileContentType不是必须的
//但一定要设置好getter与setter,这是Struts2固有的特点。
//设置完getter与setter一定不可以在执行方法中再次初始化,如String xx=
//这样前台会取不值的!
private File file;
private String fileFileName;
//saveFileName是保存到服务器的名字
//利用传来过的文件的后缀名+时间戳构造,
//必要时还可以补上用户名
private String saveFileName;
//这是文件的大小,主要是为了传到前台
private String fileLength;
private String errMsg;
//防止输入输出流报警告
@SuppressWarnings("resource")
public String run() throws Exception {
//对错误信息字符串赋予""值,否则会返回前台一个null
errMsg = "";
//判断是否符合上传的条件
boolean canUpload = true;
//取出Upload的绝对路径
String saveFilePath = ServletActionContext.getServletContext()
.getRealPath("/Upload");
//取出上传文件的后缀名
String fileExtensions = getFileFileName().substring(
getFileFileName().lastIndexOf("."));
//根据后缀名判断是否能上传
if (!(fileExtensions.equals(".gif") || fileExtensions.equals(".png")
|| fileExtensions.equals(".jpeg")
|| fileExtensions.equals(".jpg") || fileExtensions
.equals(".bmp"))) {
errMsg += "上传文件只能是图片,后缀名必须是bmp,gif,jpg,jpeg!";
canUpload = false;
}
//根据文件大小判断是否能上传
if (file.length() > (2 * 1024 * 1024)) {
errMsg += "上传文件太大,请少于2M!";
canUpload = false;
}
//把文件大小转化成字符串,推回给前台
fileLength = (file.length() / 1024) + "KB";
//如果可以上传
if (canUpload) {
//就营造一个服务器上的文件名
saveFileName = System.currentTimeMillis() + fileExtensions;
//输出流是保存到服务器的输出流
FileOutputStream fos = new FileOutputStream(saveFilePath + "/"
+ saveFileName);
//输入流就是传过来的文件
FileInputStream fis = new FileInputStream(getFile());
//缓冲数组
byte[] buffer = new byte[1024];
int len = 0;
//输入流不停读东西到缓冲数组,直到读完
while ((len = fis.read(buffer)) > 0) {
//输出流不停把缓冲数组的东西的东西写到服务器上Upload的绝对目录上面
fos.write(buffer, 0, len);
}
//返回struts.xml一个成功结果
return "success";
} else {
return "error";
}
}
//所有静态成员必须有getter与setter,否则不能与前台交互
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 getSaveFileName() {
return saveFileName;
}
public void setSaveFileName(String saveFileName) {
this.saveFileName = saveFileName;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public String getFileLength() {
return fileLength;
}
public void setFileLength(String fileLength) {
this.fileLength = fileLength;
}
}
相关文章推荐
- Java中接口和抽象类的区别与相同之处
- hadoop学习笔记(四)——eclipse+maven+hadoop2.5.2源码
- Java对象的创建过程
- java之list源码浅析
- Java运算符
- java实现把两张图片合并
- 在eclipse中添加myeclipse插件
- 对几个通用的Java hashCode重写方案的一些思考和探讨
- Eclipse下jad反编译之“类文件查看器”不能处理给定的输入错误解决
- MyEclipse2013自动生成Hibernate4.1
- Spring MVC实现查找酒店用例
- eclipse遇到问题汇总
- ubuntu 下 Eclipse中syso 快捷键 Alt + / 不能使用的问题
- Caused by: java.net.UnknownHostException
- 【Java】利用ant插件压缩文件夹及其所有子文件与子文件夹
- 读LockSupport源码
- 【Java】关于去除空格
- 从数据类型开始
- Java设计模式--适配器模式
- Java RandomAccessFile用法 【转】