关于ssh图片上传的问题

关于SSH小白讲解的有什么讲错了大家指出来我会修改的

对于一个初学ssh的人来说 可能还不太了解图片上传的功能(没错 就是我)
我在网上查阅了很多资料 但感觉对不上我自己想写的东西 一直找不到自己想要的 最后看到别人说sturts2文档中有文件上传 就特意去找了一下,还真有。

如果侵权请联系我删除

接下来我会把代码列出来 并进行讲解一下 如果还是看不懂的可以去下载帮助文档看

首先,要下载几个jar包

这里写图片描述

然后,创建文件上传页面FileUpload.jsp,内容如下:

FileUpload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri ="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title> Struts 2 File Upload </title > 
</head > 
<body > 
    <s:form action ="fileUpload" method ="post" enctype ="multipart/form-data" > 
        <s:file name ="myFile" label ="Image File" /> 
        <s:textfield name ="caption" label ="Caption" />        
        <s:submit /> 
    </s:form >
</body>
</html>

在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,< s:file/>标志将文件上传控件绑定到Action的myFile属性。

其次是Action层的代码:

FileUploadAction.java

    package tutorial;

 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Date;

 import org.apache.struts2.ServletActionContext;

 import com.opensymphony.xwork2.ActionSupport;

 public class FileUploadAction extends ActionSupport  {
     private static final long serialVersionUID = 572146812454l ;
     private static final int BUFFER_SIZE = 16 * 1024 ;

     private File myFile;
     private String contentType;
     private String fileName;
     private String imageFileName;
     private String caption;

     public void setMyFileContentType(String contentType)  {
         this .contentType = contentType;
    } 

     public void setMyFileFileName(String fileName)  {
         this .fileName = fileName;
    } 

     public void setMyFile(File myFile)  {
         this .myFile = myFile;
    } 

     public String getImageFileName()  {
         return imageFileName;
    } 

     public String getCaption()  {
         return caption;
    } 

      public void setCaption(String caption)  {
         this .caption = caption;
    } 

     private static void copy(File src, File dst)  {
         try  {
            InputStream in = null ;
            OutputStream out = null ;
             try  {                
                in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                 byte [] buffer = new byte [BUFFER_SIZE];
                 while (in.read(buffer) > 0 )  {
                    out.write(buffer);
                } 
             } finally  {
                 if ( null != in)  {
                    in.close();
                } 
                  if ( null != out)  {
                    out.close();
                } 
            } 
         } catch (Exception e)  {
            e.printStackTrace();
        } 
    } 

     private static String getExtention(String fileName)  {
         int pos = fileName.lastIndexOf( " . " );
         return fileName.substring(pos);
    } 

    @Override
     public String execute()      {        
        imageFileName = new Date().getTime() + getExtention(fileName);
        File imageFile = new File(ServletActionContext.getServletContext().getRealPath( " /UploadImages " ) + " / " + imageFileName);
        copy(myFile, imageFile);
         return SUCCESS;
    } 

} 

在FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的< s:file/>和< s:textfield >标志。但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?其实,< s:file/>标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,< s:file name=”xxx” />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。

FileUploadAction作用是将浏览器上传的文件拷贝到WEB应用程序的UploadImages(这个就是上面默认方法里的imageFile后面的东西 作用是将图片存在这个文件夹里)文件夹下,新文件的名称是由系统时间与上传文件的后缀组成,该名称将被赋给imageFileName属性,以便上传成功的跳转页面使用。

注意如果没有自动生成这个Uploadlmages文件夹 需要你自动去新建
当然你也可以自己设置图片储存的位置

我是这么设置的

    File imageFile = new File("D:\\img"+"/"+imageFileName);

我将图片的路径存到了D盘下的img文件夹里

Action的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <package name="default" extends="struts-default">
        <action name="fileUpload" class="action.FileUploadAction" >
            <result name="success">/ShowUpload.jsp</result>
        </action>
    </package>

</struts>

下面我们就来看看上传成功的页面:

ShowUpload.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri ="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title > Struts 2 File Upload </title > 
    </head>
    <body > 
    <div style="padding: 3px; border: solid 1px #cccccc; text-align: center"> 
        <img src ="UploadImages/<s:property value ='imageFileName'/>"/>
        <br /> 
        <s:property value ="caption" /> 
    </div > 

</body>
</html>

注意这个img的路径如果你Action层改了路径 就写成你改的路径 这里我没有改

最后是web.xml文档

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:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > 

    <display-name>Struts 2 Fileupload</display-name> 

    <filter> 
        <filter-name>struts-cleanup</filter-name> 
        <filter-class> 
            org.apache.struts2.dispatcher.ActionContextCleanUp
        </filter-class> 
    </filter> 

    <filter> 
        <filter-name>struts2</filter-name> 
        <filter-class> 
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class> 
    </filter> 

    <filter-mapping> 
        <filter-name>struts-cleanup</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
        <filter-name>struts2</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <welcome-file-list> 
        <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

</web-app> 

所有的代码就写完了

发布运行应用程序,在浏览器地址栏中键入http://localhost:8080/Struts2_Fileupload/FileUpload.jsp,出现图示页面:
这里写图片描述

选择图片文件,填写Caption并按下Submit按钮提交,出现图示页面:

这里写图片描述

到此所有步骤已经写完了
还有不明白的小白可以问我 当然了自己看sturts2文档更好


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值