struts2中的文件上传和下载

曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果

再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础。

十分适合初学者!

jsp:页面

<!–在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data,
不然就会以二进制文本上传到服务器端–>
<form action=”fileUpload.action” method=”post” enctype=”multipart/form-data”>

file: <input type=”file” name=”file”><br>

<input type=”submit” value=”submit”>
</form>

上传action

public class FileUploadAction extends ActionSupport
{
private String username;

//注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件
private File file;

//提交过来的file的名字
private String fileFileName;//必须是input中name值+FileName固定格式

//提交过来的file的MIME类型
private String fileContentType;//

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 getFileContentType()
{
return fileContentType;
}

public void setFileContentType(String fileContentType)
{
this.fileContentType = fileContentType;
}

@Override
public String execute() throws Exception
{
String root = ServletActionContext.getServletContext().getRealPath(“/upload”);//上传的文件的位置

InputStream is = new FileInputStream(file);//基于file创建一个文件输入流

OutputStream os = new FileOutputStream(new File(root, fileFileName));//创建输出流

System.out.println(“fileFileName: ” + fileFileName);

// 因为file是存放在临时文件夹的文件,我们可以将其文件名和文件路径打印出来,看和之前的fileFileName是否相同
System.out.println(“file: ” + file.getName());
System.out.println(“file: ” + file.getPath());

byte[] buffer = new byte[1024];
int length = 0;

while(-1 != (length = is.read(buffer, 0, buffer.length)))//经典写入操作
{
os.write(buffer);
}

os.close();
is.close();

return SUCCESS;
}
}

 

这样就成功的将文件上传了,然后你就去看工程中上传的目录中有没有你的文件很遗憾没有,原因是它上传到tomcat/webapps工程中upload的目录中了.

 

下载

jsp页面

下载:
<a href=”downloadAction?fileName=JAVA.doc”>下载</a>

 

DownloadAction:

package com.iss.action;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoad extends ActionSupport {

private String fileName;//要下载的文件名

private String directory;//要下载的文件目录

public void setDirectory(String directory) {
this.directory = directory;
}

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public InputStream getInputStream() throws FileNotFoundException {

String dir = directory + fileName;

System.out.println(dir);//输出的文件要下载的路径

//return ServletActionContext.getServletContext().getResourceAsStream(
//”/” +dir);//使用相对路径下载文件内容默认是和webRoot同一目录
return new FileInputStream(dir);//使用全局路径下载

}

@Override
public String execute() throws Exception {
System.out.println(“fileName:” + fileName);
return SUCCESS;
}
}

 

struts.xml中的配置

<!–下载action –>
<action name=”downloadAction” class=”com.iss.action.DownLoad”>
<!– <param name=”directory”>/images/</param> –>下载路径为相对路径
<param name=”directory”>E:/wang/head/</param>下载路径为绝对路径
<result type=”stream”>//类型是stream类型注意
<!–指定下载文件内容的类型 –>
<param name=”contentType”>plain/text</param>
<!–inputName默认值inputStream –>

<!–默认值是inputStream指定文件的源头,根据这个配置,找getInputStream方法获得文件流–>
<param name=”inputName”>inputStream</param>
<!–动态文件获取 –>
<param name=”contentDisposition”>attachement;fileName=”${fileName}”</param>
<!– 指定下载文件的缓冲大小 –>
<param name=”bufferSize”>50000000</param>
</result>
<result name=”input”>error.jsp</result>
</action>

 

至此简单的文件读写已经完成!由于水平有限,还望不吝赐教!

标签