文件的上传
概述:
第一步,需要输入流 读入虚拟机程序中
第二步从虚拟机程序输出流放到需要的路径
思路:
1.客户端 浏览器如何处理---表单
2.action 中如何处理上传的文件
3.如何将文件保存到服务器的某个位置。
uil:统一资源描述符 项目名+actionname名
method 提交方式 get不安全
post 协议体
<form action=" " method="post" enctype="" >
<input type="file" name="uplode" />
<input type="submit" value="确认上传" />
</form>
详细解释说明:enctype :"application/x-wwww-form-urlencodel"--默认,服务器可以根据表单的name属性获取表单的值
enctype="multipart/form-date"---这种形式,表单的数据会被以二进制的方式送到服务器,服务器可以等到用户上传的信息。
服务器端(后台)
UplodeAction{
需要接收客户端上传的内容(接收一个流)
如何将接收到的文件存储到服务器的某个位置
}
文件上传(以上传图片为列) 版本1
1.前台 jsp 页面
<form action="/Io/uploade1" method="post" enctype="multipart/form-data">
<input type="file" name="uploade1"/>
<input type="submit" value="确认上传"/>
</form>
2. struts2.xml文件
<package name="p1" extends="struts-default" namespace="/">
<action name="uploade1" class="com.upload.Uploade1">
<result name="success" type="redirect">/success.jsp</result>
</action>
</package>
3.后台 Action
package com.upload;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.opensymphony.xwork2.ActionSupport;
public class Uploade1 extends ActionSupport {
private File uploade1;
public File getUploade1() {
return uploade1;
}
public void setUploade1(File uploade1) {
this.uploade1 = uploade1;
}
public String execute() throws IOException{
InputStream is = new FileInputStream(uploade1);
OutputStream os = new FileOutputStream("D:\\apache-tomcat-7.0.88-windows-x64\\apache-tomcat-7.0.88\\webapps\\Io\\uplode1\\1.jpg");
byte[] be = new byte[1024];
int len =0;
while(true){
len= is.read(be, 0, be.length);
if(len == -1) break;
os.write(be, 0, len);
}
is.close();
os.close();
return "success";
}
}
文件上传(以上传图片为列) 版本2
1.jsp页面:
<form action="/Io/uploade2" method="post" enctype="multipart/form-data">
<input type="file" name="upload"/>
<input type="submit" value="确认上传"/>
</form>
2.struts2.xml 配置文件
<struts>
<!-- 设置上传文件的大小限制 -->
<constant name="struts.multipart.maxSize" value="2097152000"></constant>
<package name="p1" extends="struts-default" namespace="/">
<action name="uploade2" class="com.upload.Uploade2">
<!--引入默认拦截器-->
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="load">/success.jsp</result>
</action>
</package>
</struts>
3.后台package com.upload;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Uploade2 extends ActionSupport {
private File upload;
private String uploadFileName;
private String directory;
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getDirectory() {
return directory;
}
public void setDirectory(String directory) {
this.directory = directory;
}
public String execute() throws IOException{
ServletContext servletContext = ServletActionContext.getServletContext();
String realPath = servletContext.getRealPath("/directory/"+"/"+uploadFileName);
System.out.println("相对路径="+realPath);
FileUtils.copyFile(upload, new File(realPath));
return "load";
}
}
文件的下载
1.在服务器上装备好要下载的文件
1.1将文件 copy 到下载的目标
2.编写 action
文件下载 样例代码
1.jsp 页面:
<!--使用超链接-->
<body>
<a href="/Io/DownLoadAction?name=Java_20190123110336.flv">点击下载</a>
</body>
2.struts2.xml文件
<struts>
<!-- 设置上传文件的大小限制 -->
<constant name="struts.multipart.maxSize" value="2097152000"></constant>
<package name="p1" extends="struts-default" namespace="/">
<!-- 文件下载 -->
<action name="DownLoadAction" class="com.download.DownLoadAction">
<result type="stream">
<!-- 指定下载文件的类型 默认下载为txt格式 本例为下载视频 -->
<param name="contentType">text/plain</param>
<!-- 下载图片 -->
<!-- <param name="contentType">image/jpg</param> -->
<!-- 解释说明:
contentDisposition:指定下载文件在浏览器客户端窗口打开还是以附件的形式下载到本地
inline:==》在浏览器窗口打开
attachment==>以附件的形式下载到本地
-->
<param name="contentDisposition">attachment;filename=${name}</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
3.Action 后台代码:
package com.download;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import javax.swing.JSlider;
import javax.swing.plaf.basic.BasicSliderUI;
import javax.swing.plaf.basic.BasicSliderUI.ActionScroller;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoadAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public InputStream getInputStream() throws FileNotFoundException{
ServletContext sc = ServletActionContext.getServletContext();
InputStream is = new FileInputStream(sc.getRealPath("/upload"+"/"+name));
return is;
}
}