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

struts2中的文件上传和下载

2014-06-05 13:08 549 查看
天下大事,必做于细。天下难事,必作于易。

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

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

十分适合初学者!

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>

至此简单的文件读写已经完成!由于水平有限,还望不吝赐教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: