struts2上传

关于jsp如何实现文件上传,未来将有博主将有代码贴出来,现在讨论下struts下的文件上传及下载

struts2文件上传技术原理:

1.struts2文件上传的底层支持
在struts.properties配置文件中,配置struts2上传文件时的上传解析器:
struts.multipart.parser=cos指定使用cos的文件上传解析器
struts.multipart.parser=pell指定使用pell的文件上传解析器
struts.multipart.parser=jakarta    指定使用common-fileupload文件上传解析器,默认的
 
2.每个文件上传域  需要在action中提供3个field来封装
(1)与文件上传域的name同名的,类型为File的field
(2)名为文件上传域的name+FileName,类型为string的field
(3) 名为文件上传域的name+ContentType,类型为string的field
其他参数按照普通参数提供field和构造函数

3.使用io流控制将文件写入服务器的物理磁盘即可
4.文件过滤
文件过滤的方式有两种:
a  在action通过代码进行控制。File类型的Field可以获取上传文件的类型
string类型XXXContentType可以获取上传文件的类型,通过判断上传文件大小、文件类型可对上传文件进行过滤
b 使用fileUpload拦截器,只要进行简单的配置即可
(1)启用fileUpload拦截器,当文件过滤失败时struts会返回input逻辑视图名,在struts.xml中配置action,为其指定两个参数,即
---allowedTypes,该参数指定允许上传的文件类型,多个文件类型之间用,隔开,如image/jpeg,image/pjpeg,image/gif,image/png等
---maximumSize:该参数指定允许上传的文件大小,单位是字节(1kb=1024字节)
注意:启用fileUpload拦截器之后,还要手动启动默认拦截器defaultStack:
    <interceptor-ref name="fileUpload">
<!--      maximumSize 字节大小 -->
     <param name="allowedTypes">image/png,image/jpeg,image/pjpeg,image/gif</param>
     <param name="maximumSize">20000</param>   
     </interceptor-ref>
     <interceptor-ref name="defaultStack"></interceptor-ref>

(2)需要为input逻辑视图名配置物理视图资源
 <result name="input">upload.jsp</result>

主要实现代码如下

AddPicProAction.java文件,该action实现文件的上传

package com.gree.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.UUID;

import org.apache.struts2.ServletActionContext;

import com.gree.service.PicService;
import com.opensymphony.xwork2.ActionSupport;

public class AddPicProAction extends ActionSupport {

    private String picName;
         //每个文件域需要3个field封装
    private File pic;          //上传的文件
    private String picFileName; //上传文件的原始文件名
    private String  picContentType;//上传文件的文件类型
    public String getPicName() {
        return picName;
    }
    public void setPicName(String picName) {
        this.picName = picName;
    }
    public File getPic() {
        return pic;
    }
    public void setPic(File pic) {
        this.pic = pic;
    }
    public String getPicFileName() {
        return picFileName;
    }
    public void setPicFileName(String picFileName) {
        this.picFileName = picFileName;
    }
    public String getPicContentType() {
        return picContentType;
    }
    public void setPicContentType(String picContentType) {
        this.picContentType = picContentType;
    }
    /* (non-Javadoc)
     * @see com.opensymphony.xwork2.ActionSupport#execute()
     */
    @Override
    public String execute() throws Exception {
        //此处pic就代表了我们的文件,因此此处只要io流将文件写入磁盘即可
        String uploadpath=ServletActionContext.getServletContext().getRealPath("/upload");
//        String houzui="";
//        if(picFileName.lastIndexOf(".")!=-1) {
//         houzui =picFileName.substring(picFileName.lastIndexOf("."));
//         }

        String newFileName =picFileName;

        //这代表要上传的文件,文件上传就是io流
        FileOutputStream os=new FileOutputStream(uploadpath+"/"+newFileName);
        FileInputStream is=new FileInputStream(pic);
         int hasRead=0;

         byte[] buff=new byte[2014];

         while((hasRead=is.read(buff))>0){

             os.write(buff,0,hasRead);
         }
         is.close();
         os.close();

         PicService ps=new PicService();
         ps.addpic(picName,newFileName);
        return SUCCESS;

    }

}

在WebContent根目录下建立一个文件夹upload,如图:

struts.xml配置如下:

   <action name="addPicPro" class="com.gree.action.AddPicProAction">

     <interceptor-ref name="fileUpload">
<!--      maximumSize 字节大小 -->
     <param name="allowedTypes">image/png,image/jpeg,image/pjpeg,image/gif</param>
     <param name="maximumSize">2000000000000</param>
     </interceptor-ref>
     <interceptor-ref name="defaultStack"></interceptor-ref>
      <result type="chain">listpics</result>
      <result name="input">upload.jsp</result>
   </action>

jsp文件如下:

upload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP ‘upload.jsp‘ starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
<s:head/>
  </head>

  <body>
    <s:form action="addPicPro" enctype="multipart/form-data" method="post" namespace="/">
    <s:textfield name="picName" label="图片名"/>
    <s:file name="pic" label="选择图片"/>
    <s:submit value="上传"/>
    </s:form>

  </body>
</html>

listPicts.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP ‘listPicts.jsp‘ starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

    <script>

    function func(o){

    document.getElementById("show").src="upload/"+o;

    }

    </script>

  </head>
<!--   listValue 是文本内容     listKey是value -->
  <s:select list="picts" listKey="fileName" listValue="picName" label="请选择图片"
  onchange="func(this.value)"/>
  <img id="show" width=200/>
  <body>
  </body>
</html>

好了,有什么问题可回复博主,博主有时间会回答

时间: 2024-10-11 21:27:01

struts2上传的相关文章

Struts2 上传下载

后台代码: public String getFileName() { String fileName = this.getRequest().getParameter("fileName"); String downloadFileName = fileName; try { } catch (Exception e) { e.printStackTrace(); } return downloadFileName; } // 下载的流 public InputStream getI

struts2上传的问题

5. 在这里我加一个struts2的一个上传验证的问题 上传时我们可以这样来验证 //判断上传的文件是否合要求 public boolean filterType(String []types){ //这里用的是 上传的file对象的方法length //上传的类型都是二进制,所以我们就自己找后缀名 String fileType = uploadUtil.getExt(); for(String type : types){ if(! type.equals(fileType)){ retur

struts2上传下载

struts上传下载必须引入两个jar文件: commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.

struts2上传文件

1.upload.java(java文件上传的读写方法) package com.OS.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.struts2.ServletActionContext; import co

[JavaWeb基础] 009.Struts2 上传文件

在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因为文件上传时二进制文件可能会很大,还有就是enctype属性, 这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端 --> <form action="fileUpload.action" method="post"

struts2 上传文件

web.xml: <?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem

工作笔记4.struts2上传文件到server

本文介绍两种:上传文件到server的方式   一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完毕文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data. <form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="mu

工作笔记4.struts2上传文件到服务器

本文介绍两种:上传文件到服务器的方式   一种是提交Form表单:另一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完成文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data. <form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="multip

java struts2 上传文件范例

Struts2 default.properites属性文件相关说明 struts.i18n.encoding=UTF-8 国际化默认编码格式为UTF-8 struts.objectFactory = spring spring整合时需要使用 ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data # struts.multipart.parser=cos # struts.