还是的好好的静下心来深入的学习,不要被遥远吓倒。
来看struts2的文件上传和下载
关于上传其实struts2中早就为我们封装好了一个fileUpLoad这个拦截器可以为我们提供上传功能,而不需要想servlet那样麻烦。
fileUpload中有三个参数让我们来接收前端传过来的文件参数分别为:
private File myUpload;//这个获取的应该是上传的文件,而并不是表单的文件名(这个参数经过我自己的验证,接受的就是上传的文件,它的参数类型也是File,不知道为什么在网上搜到的资料都说是表单的文件名)
private String myUploadContextType;//获取的应该是上传的文件类型(这个参数我验证时总是为空,不知道为什么希望大神能帮助解答)
private String myUploadFileName;//获取的上传的文件名
要注意的是contextType和FileName的前缀都是和File的名字一样。
接下来就是写方法:
public String shangchan() throws IOException {
System.out.println("myUpload "+myUpload);
System.out.println("myUploadContextType "+myUploadContextType);
System.out.println("myUploadFileName "+myUploadFileName);
String address=ServletActionContext.getServletContext().getRealPath("/fileup");
//这个指向的是绝对路径的工程(到工程为止)
System.out.println(address);
File file=new File(address,myUploadFileName);//uploadFile上传后的文件名
try {
FileUtils.copyFile(myUpload,file);//在同一个文件夹下面复制文件
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
这个方法的步骤就是先获取要传到了地址,再在该地址下创造一个文件,在利用FileUtils(文件工具类)的复制方法将前端传过来的文件复制到自己创建的文件中,即完成上传。
下载
下载也是由struts2进行封装,主要就是在配置文件中进行配置。
<action name="xiazai" class="com.upsoft.action.fileuploadAction">
<result name="success" type="stream">
<param name="contentType">image/jqeg</param><!-- 要下载的文件类型 -->
<param name="inputName">getInputStream()</param><!-- 文件输入流的名字 -->
<param name="contentDisposition">attachment;filename="${fileName}"</param>(利用ognl表达式来获取值)
<param name="bufferSize">10240</param>
</result>
</action>
action中:
public String getFileName() throws UnsupportedEncodingException {
String fileName=new String("图片.jpg".getBytes("utf-8"),"ISO8859-1");
return fileName;
}
public InputStream getInputStream() throws FileNotFoundException {
File file=new File("D:\\my.jpg");/*
InputStream is=ServletActionContext.getServletContext().getResourceAsStream("/fileup/my");*/
InputStream inputStream=new FileInputStream(file);
return inputStream;
}
其实框架就是简化servlet等的操作,所有的功能servlet都应该有,同样servlet中能做到的框架也应该都能做到,上传下载没有任何难度,理清楚了然后在多练几遍,都是死东西,加油。