struts2文件上传下载

1.上传页面
*<form action="对应上传的Action" enctype="multipart/form-data" method="post">
*文件上传框:<input type="file" id="upload_file" [color=red]name="file"[/color]/> 此file必须和Action中的File file同名,并且文件名必须是fileFileName(struts2会自动填充文件名)
*form提交的按钮(可以直接用submit按钮,也可以写在js里)
<form action="${pageContext.request.contextPath}/pfl/attachment/saveAttachmentAction.action" enctype="multipart/form-data" method="post" id="uploadAttachmentForm" >
<div class="row">
<div class="row_table_top">
<div class="row_table_top_left"><img src="${pageContext.request.contextPath}/system/assets/images/point_down.gif" width="7" height="8" /><fmt:message key="pfl.system.attachment.upload"/></div>
</div>

<div class="row_table_middle">


<table width='100%' align=center height='200' cellspacing="0" cellpadding="0" border="0">
<tr class="trform"><td colspan="2">

</td></tr>

<tr class="trform"><th valign="top">
<div align="right"><fmt:message key="pfl.system.attachment.select_file" /><fmt:message key="global.maohao"/></div>
</th>
<td valign="top" style="">
<div align="left"><input type="file" id="upload_file" name="file"/></div>
</td>
</tr>

<tr class="trform">
<th valign="top"><div align="right"> </div></th>
<td align="left">
<div align="left">
<input type="button" class="button2" id="go_ul" onclick="uploadAttachment();" value="<fmt:message key="pfl.system.attachment.submit"/>" />
   
<input type="button" name="back" id="back" class="button2" onclick="win_close();" value="<fmt:message key="pfl.system.attachment.close" />"/>
</div>
</td>
</tr>
</table>

</div>

</div>
</form>

2.下载页面
*访问下载的Action(通过id获得不同文件)
<div id="docs" style="">
<c:forEach items="${contractAttachmentList}" var="contractAttachment">
<span id="${contractAttachment.id}">
<input type="hidden" name="contractAttachment.id" value="${contractAttachment.id}"/>
<a href="${pageContext.request.contextPath}/pfl/attachment/downloadAttachmentAction.action?id=${contractAttachment.id}">${contractAttachment.name}</a>
</span>
</c:forEach>
</div>
3.Action
public class ContractAttachmentAction extends ActionSupport {

private ContractAttachment contractAttachment;

private IContractAttachmentService contractAttachmentService;

private File file;
private String fileFileName;
private String fileContentType;
private String savePath;

private String path;

private String downloadFile;
private String downloadFileName;

public String showupload(){
HttpServletRequest request = ServletActionContext.getRequest();
String id = request.getParameter("id");
request.setAttribute("id",id);
return "showupload";
}

public String save(){
Date currentDate = UtilTools.getCurrentDate();
HttpServletRequest request = ServletActionContext.getRequest();
try{
String contractID = request.getParameter("contractID");
upload();
if(contractID!=null&&!contractID.equals("")){
contractAttachment.setCid(Integer.parseInt(contractID));
}
contractAttachment.setName(fileFileName);
contractAttachment.setPath(path);
contractAttachment.setCreateTime(currentDate);

contractAttachmentService.saveOrUpdate(contractAttachment);
request.setAttribute("success","success");
request.setAttribute("contractAttachment",contractAttachment);
return "showupload";
}catch (Exception e){
e.printStackTrace();
}
return "failure";
}

public String update(){

try{
contractAttachmentService.update(contractAttachment);
return "update";
}catch (Exception e){
e.printStackTrace();
}
return "failure";
}

public String delete(){
// HttpServletResponse response= ServletActionContext.getResponse();
// PrintWriter writer=null;
// response.setContentType("text/text;charset=UTF-8");

HttpServletRequest request = ServletActionContext.getRequest();
savePath=ServletActionContext.getServletContext().getRealPath("/")+"uploads";
File f=null;

String id = request.getParameter("id");
if(id==null&&id.trim().equals("")){return "failure";}
try{
// writer=response.getWriter();
contractAttachment = contractAttachmentService.get(Integer.parseInt(id));

f = new File(savePath,contractAttachment.getPath());

if(f!=null){
f.delete();
//返回1代表删除成功
// writer.write("1");
}
// else{
// writer.write("0");
// }
}catch (Exception e){
e.printStackTrace();
}
contractAttachmentService.delete(contractAttachment);
return null;
}

public String download(){


return "download";
}

public void upload() throws Exception {
savePath=ServletActionContext.getServletContext().getRealPath("/")+"uploads";//获得上传文件放置的目录,可以自己定义,绝对路径
System.out.println(savePath);

String formatDate = UtilTools.getBussinessNoByDate();//获得当前时间
int position = fileFileName.lastIndexOf(".");//文件后缀名
String extension = fileFileName.substring(position);
int random = new Random().nextInt(1000);//获得的是随机数字,用于构造文件名
path = formatDate + random + extension;//已经构造号的文件名

System.out.println(path);

InputStream is = new FileInputStream(file);//读取上传页面过来的文件流
System.out.println(fileFileName);
System.out.println(fileContentType);
File destFile = new File(savePath,path);//创建需写入的文件

if(!destFile.exists()){
destFile.createNewFile();
}
OutputStream os = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
int length = 0 ;
while((length = is.read(buffer)) > 0){
os.write(buffer, 0, length);//写入
}

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

}

public ContractAttachment getContractAttachment() {
return contractAttachment;
}

public void setContractAttachment(ContractAttachment contractAttachment) {
this.contractAttachment = contractAttachment;
}

public IContractAttachmentService getContractAttachmentService() {
return contractAttachmentService;
}

public void setContractAttachmentService(IContractAttachmentService contractAttachmentService) {
this.contractAttachmentService = contractAttachmentService;
}

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;
}

public String getSavePath() {
return savePath;
}

public void setSavePath(String savePath) {
this.savePath = savePath;
}
//从下载文件原始存放路径读取得到文件输出流
public InputStream getDownloadFile(){
HttpServletRequest request = ServletActionContext.getRequest();
savePath=ServletActionContext.getServletContext().getRealPath("/")+"uploads\\";
String id = request.getParameter("id");

InputStream fileInputStream = null;
try {
if(id!=null&&!id.trim().equals("")){
contractAttachment = contractAttachmentService.get(Integer.parseInt(id));
downloadFile = savePath+contractAttachment.getPath();//下载文件绝对地址
downloadFileName = new String(contractAttachment.getName().getBytes(),"ISO-8859-1");//避免中文乱码
}
fileInputStream = new FileInputStream(downloadFile);//手动new一个InputStream获得下载文件流
} catch (Exception e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}

return fileInputStream;

}

public void setDownloadFile(String downloadFile) {
this.downloadFile = downloadFile;
}

public String getDownloadFileName() {
return downloadFileName;
}
}

4.配置
<package name="pfl-attachment" namespace="/pfl/attachment" extends="struts-default">
<action name="*AttachmentAction" method="{1}" class="contractAttachmentAction">
<result name="showupload">/pfl/system/contract/uploadAttachment.jsp</result>
<result name="download" type="stream">
<!-- 下载文件类型定义(通用类型) -->
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<!-- 下载文件输出流定义,会找Action中的InputStream getDownloadFile() -->
<param name="inputName">downloadFile</param>
<!-- 下载文件处理方法,获得下载的文件名(Action中的getDownloadFileName() ) -->
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
<param name="bufferSize">4096</param>
</result>
<result name="failure">/error.jsp</result>
<result name="input">/error.jsp</result>
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">10240000</param>
<!--<param name="fileUpload.allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg ,image/x-png, image/pjpeg</param>-->
</interceptor-ref>
</action>
</package>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值