文件上传

 

upload.jsp

 

<%@ page language="java" pageEncoding="gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

 

<html>

    <head>

       <title>JSP for UploadForm form</title>

    </head>

    <body>

       <html:form action="/upload" method="post" enctype="multipart/form-data">

       选择上传的文件:<html:file property="myfile"></html:file>

           <html:submit value="上传"/>

       </html:form>

    </body>

</html>

 

-------------------------------------------------------------‘

 

UploadForm.java

 

package prj18.form;

 

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.upload.FormFile;

 

public class UploadForm extends ActionForm {

    private FormFile myfile;

    public ActionErrors validate(ActionMapping mapping,

           HttpServletRequest request) {

       // TODO Auto-generated method stub

       return null;

    }

 

 

    public void reset(ActionMapping mapping, HttpServletRequest request) {

       // TODO Auto-generated method stub

    }

 

    public FormFile getMyfile() {

       return myfile;

    }

 

    public void setMyfile(FormFile myfile) {

       this.myfile = myfile;

    }

}

 

UploadAction.java

 

package prj18.action;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.upload.FormFile;

 

import prj18.form.UploadForm;

 

 

public class UploadAction extends Action {

      

       public ActionForward execute(ActionMapping mapping, ActionForm form,

                     HttpServletRequest request, HttpServletResponse response) {

              UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub

              FormFile file=uploadForm.getMyfile();

              //得到文件的基本信息;

           String name=file.getFileName();//文件名

              int size=file.getFileSize();//文件大小

              String type=file.getContentType();//文件类型

             

              System.out.println(name);

              System.out.println(size);

              System.out.println(type);

              return new ActionForward("/upload.jsp");

       }

}

 

 

遇到问题:

JSP的表单部分没有加:

    enctype="multipart/form-data"

所以报错:java.lang.IllegalArgumentException: argument type mismatch

 

 

要是要限制上传文件的大小,应该在配制文件中加:

<controller maxFileSize="10M"></controller>

这是限制文件不得超过10M

 

 

 

----------------------------------------------------------------

 

从上面可知:可以得到上传的信息:

 

那么怎么把文件保存在服务器端呢?看下面。

将上面的UploadAction.java改成下面的:UploadAction.java

 

 

package prj18.action;

 

import java.io.FileOutputStream;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.upload.FormFile;

 

import prj18.form.UploadForm;

 

 

public class UploadAction extends Action {

   

    public ActionForward execute(ActionMapping mapping, ActionForm form,

           HttpServletRequest request, HttpServletResponse response) {

       UploadForm uploadForm = (UploadForm) form;// TODO Auto-generated method stub

       FormFile file=uploadForm.getMyfile();

       /*

        String name=file.getFileName();

       int size=file.getFileSize();

       String type=file.getContentType();

      

       System.out.println(name);

       System.out.println(size);

       System.out.println(type);*/

//保存在服务器端

       FileOutputStream fos=null;

       try{

           byte[] data = file.getFileData();//取得数据

           String fileName= file.getFileName();//取得上传的文件名

       fos=new FileOutputStream(fileName);//将上传后的文件写到指定文件中

//[这是保存在服务器上的名字与上传的名字相同]

           fos.write(data);//写数据

       }catch(Exception ex){ex.printStackTrace();}

    finally{

       try{fos.close();

    }catch(Exception ex){

      

    }

      

    }  

       return new ActionForward("/upload.jsp");

    }

}

 

 

可以在默认的路径下找到上传后的文件。默认的路径为:%tomcat%/bin下。

 

一般要把上传的文件放到指定的路径下,如何实现呢?

 

 

 

--------------------------------------------------------------------------------------------

 

fos=new FileOutputStream(fileName);//将上传后的文件写到指定文件中

//[这是保存在服务器上的名字与上传的名字相同]

中加一个路径名,那怎么加一个路径名。

方法1、可以加入绝对路径。任意指定的路径。

fos=new FileOutputStream(E:/apache-tomcat-6.0.14/webapps/prj18+fileName);//将上传后的文件写到指定文件中

//[这是保存在服务器上的名字与上传的名字相同]

 

 

方法2

    try {

           byte[] data = file.getFileData();

           String fileName = file.getFileName();

ServletContext application = this.getServlet().getServletContext();

           String realPath = application.getRealPath("/FILES/");

           fos = new FileOutputStream(realPath + "/" + fileName);

           fos.write(data);

       } catch (Exception ex) {

           ex.printStackTrace();

       } finally {

           try {

              fos.close();

           } catch (Exception ex) {

           }

 

       }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值