您的位置:首页 > 编程语言 > Java开发

【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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: