Struts2框架的上传和下载
1.Struts2的上传
PicAction.java
package com.turing.pic.action;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.turing.pic.entity.Picture;
import com.turing.pic.service.PicService;
import com.turing.pic.service.PicServiceImpl;
public class PicAction {
private PicService picService = new PicServiceImpl();
private List<Map<String, Object>> list;
//上传
private Picture picture;
/**
* 进入添加页面
* @return
*/
public String addpage(){
return "addpage";
}
/**
* 上传文件
* @return
* @throws IOException
* @throws SQLException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public String upload() throws ClassNotFoundException,
FileNotFoundException, SQLException, IOException{
System.out.println("PicAction--->upoad()");
System.out.println("picture:"+picture);
picService.save(picture);
return "requery";
}
//------------------setter和getter对象----------------------------
public List<Map<String, Object>> getList() {
return list;
}
public void setList(List<Map<String, Object>> list) {
this.list = list;
}
public Picture getPicture() {
return picture;
}
public void setPicture(Picture picture) {
this.picture = picture;
}
}
add.jsp
<%@page contentType="text/html; charset=utf-8" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<meta charset="UTF-8">
<title>添加页面</title>
<SCRIPT LANGUAGE="JavaScript">
function add( ){
document.f.submit();
}
</SCRIPT>
<A HREF="javascript:add()">开始上传</A>
<s:form name="f" action="pic!upload.action" method="post" enctype="multipart/form-data">
<TABLE border="1" width="700">
<TR>
<TD>图片名称</TD>
<TD>
<s:textfield name="picture.name"/>
</TD>
</TR>
<TR>
<TD>图片</TD>
<TD>
<s:file name="picture.upload"/>
</TD>
</TR>
<TR>
<TD>描述</TD>
<TD>
<s:textarea name="picture.remark" rows="4" cols="40"/>
</TD>
</TR>
</TABLE>
</s:form>
Picture.java Picture对象类进行页面值得获取与传值
package com.turing.pic.entity;
import java.io.File;
/**
* @desc 用来接值的POJO
* @author HYZ
* @time 2021年3月10日
*/
public class Picture {
private int id;
private String name;
private File upload; //上传的文件
private String uploadFileName; //上传的文件名称
private String uploadContentType; //上海窜的文件类型
private String remark;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "Picture [id=" + id + ", name=" + name + ", upload=" + upload +
", uploadFileName=" + uploadFileName+ ", uploadContentType=" + uploadContentType
+ ", remark=" + remark + "]";
}
}
上传时struts.xml文件
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<include file="struts-default.xml" />
<package name="book" extends="struts-default">
<action name="pic" class="com.turing.pic.action.PicAction">
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型,多个用"," 分隔-->
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg
</param>
<!-- 配置允许上传的文件大小,单位字节 -->
<param name="maximumSize">65535</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="query" type="dispatcher">/list.jsp</result>
<result name="addpage" type="dispatcher">/add.jsp</result>
<result name="requery" type="redirect">/pic!query.action</result>
</action>
</package>
</struts>
2.Struts2的下载
PicAction.java
package com.turing.pic.action;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.turing.pic.entity.Picture;
import com.turing.pic.service.PicService;
import com.turing.pic.service.PicServiceImpl;
/**
* @desc 控制器
* @author HYZ
* @time 2021年3月10日
*/
public class PicAction {
private PicService picService = new PicServiceImpl();
private List<Map<String, Object>> list;
private String id;
//上传
private Picture picture;
/**
* 进入添加页面
* @return
*/
public String addpage(){
return "addpage";
}
/**
* 上传文件
* @return
* @throws IOException
* @throws SQLException
* @throws FileNotFoundException
* @throws ClassNotFoundException
*/
public String upload() throws ClassNotFoundException,
FileNotFoundException, SQLException, IOException{
System.out.println("PicAction--->upoad()");
System.out.println("picture:"+picture);
picService.save(picture);
return "requery";
}
//下载
private InputStream inputStream;//下载的输入流
private String myFileFileName;//下载时文件的名字
/**
* 查询列表
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public String query() throws ClassNotFoundException, SQLException{
list = picService.queryPic();
return "query";
}
/**
* @desc 下载图片
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public String download() throws ClassNotFoundException, SQLException{
System.out.println(id+":下载图片");
Map<String, Object> map = picService.queryById(id);//表示是一行数据(包含的有图片)
inputStream=(InputStream) map.get("upload");
myFileFileName=(String) map.get("uploadFileName");
return "download";
}
//------------------setter和getter对象----------------------------
public List<Map<String, Object>> getList() {
return list;
}
public void setList(List<Map<String, Object>> list) {
this.list = list;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Picture getPicture() {
return picture;
}
public void setPicture(Picture picture) {
this.picture = picture;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
}
list.jsp 数据库里面图片展示页面
<%@page contentType="text/html; charset=utf-8" %>
<!-- 使用s标签必须要引入s标签库-->
<%@taglib prefix="s" uri="/struts-tags"%>
<s:iterator id="pic" value="list" >
<div style="margin-left:10px;margin-top:10px;WIDTH: 100;float:left">
<div style="WIDTH: 100%;border:2px solid white" onmouseout="out(this)"
onmouseover="over(this)">
<img src="<%=request.getContextPath() %>/pic!download.action?id=
<s:property value="#pic.id"/>"/>
</div>
<div style="WIDTH: 100%">
<INPUT TYPE="checkbox" NAME="ids" value="<s:property value="#pic.id"/>">
<s:property value="#pic.name"/>
</div>
</div>
</s:iterator>
struts.xml 执行下载操作
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<include file="struts-default.xml" />
<package name="book" extends="struts-default">
<action name="pic" class="com.turing.pic.action.PicAction">
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型,多个用"," 分隔-->
<param name="allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg
</param>
<!-- 配置允许上传的文件大小,单位字节 -->
<param name="maximumSize">65535</param>
</interceptor-ref>
<interceptor-ref name="defaultStack" />
<result name="query" type="dispatcher">/list.jsp</result>
<result name="addpage" type="dispatcher">/add.jsp</result>
<result name="requery" type="redirect">/pic!query.action</result>
<!--下载时的结果设置-->
<!-- 设定本次结果类型为流,即stream -->
<result name="download" type="stream">
<!-- 设定下载的内容类型:压缩文件 -->
<param name="contentType">application/zip</param>
<!-- 设定输入的流逝inputStream -->
<param name="inputName">inputStream</param>
<!-- 设定下载的方式/位置为内联 -->
<param name="contentDisposition">
inline;filename="${myFileFileName}"
</param>
<!-- 设置缓存区的大小1kb -->
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
效果展示
下载
数据库存储
上传