您的位置:程序门 -> java -> web 开发



struts上传文件问题 急急急 今天下午要完成   找dearhit (梦里花开)  你要在就进,有事问


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


struts上传文件问题 急急急 今天下午要完成 找dearhit (梦里花开) 你要在就进,有事问[已结贴,结贴人:dengdai520]
发表于:2007-08-30 13:29:40 楼主
a.jsp传到action中去我找了一下   但是测试都有问题  
我以前做的上传都是a.jsp到   b.jsp都是功能页面在jsp页面中,现在用放到action中
该怎么做啊
a.jsp到   b.jsp   的做法中,那个
smartupload   su   =   new   smartupload();
//上传初始化  
su.initialize(pagecontext);
//设定上传限制  
1、这里的su.initialize(pagecontext);   说的是初始化,但是pagecontext是什么意识啊
我在action中   要报   pagecontext   未定义   请问这个该怎么该了?

2、我在http://community.csdn.net/expert/topic/5735/5735120.xml?temp=.5600855这个帖中看到的方法,但是到他的action中的时候就不能运行了
但是可以得到   上传文件的路径了传过来的数据接收到了

急急急,下午要完成,谢谢
可以帖代码嘛
测试就结贴
发表于:2007-08-30 13:57:571楼 得分:0
http://community.csdn.net/expert/topic/5725/5725533.xml?temp=.4575464zh   这个帖才对,打错了
发表于:2007-08-30 14:07:412楼 得分:0
http://community.csdn.net/expert/topic/5725/5725533.xml?temp=.4575464这个帖子中的
  formfile   file   =   uploadfileform.getfile();                       为null为什么啊
发表于:2007-08-30 14:18:493楼 得分:0
package   com.huadu.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   com.huadu.actionform.uploadactionform;
import   org.apache.struts.upload.formfile;
import   java.io.inputstream;
import   java.io.outputstream;
import   java.io.ioexception;
import   java.io.filenotfoundexception;
import   java.io.fileoutputstream;


public   class   uploadaction   extends   action   {
public     actionforward   EXECute(actionmapping   actionmapping,actionform   actionform,httpservletrequest   request,httpservletresponse   response)   throws   exception   {

//webfun   getname   =   new   webfun();
uploadactionform   uploadfileform   =   (uploadactionform)   actionform;   //uploadform是formbean
    formfile   file   =   uploadfileform.getfile();                     //那个重要的类
    system.out.println(uploadfileform.getfile());   为什么这里是空啊
    string   fname   =   file.getfilename();                                 //获得文件名
        inputstream   streamin   =   null;                                             //输入输出流
        outputstream   streamout   =   null;
        string   sysroot   =   servlet.getservletcontext().getrealpath( "userinfo ");   //获取图片文件夹路径
        string   filepath   =   sysroot   +   "\\ "   +   "89 ";               //最终路径
        try   {
            streamin   =   file.getinputstream();                 //以下是上传的代码,不用变,固定的
            streamout   =   new   fileoutputstream(filepath);
            int   bytesread   =   0;
            byte[]   buffer   =   new   byte[20480];
            while   (   (bytesread   =   streamin.read(buffer,   0,   20480))   !=   -1)   {
                streamout.write(buffer,   0,   bytesread);
            }
            streamout.close();
            streamin.close();
            request.setattribute( "info ",   "上传成功啦 ");
            return   actionmapping.findforward( "fail ");
        }
        catch   (filenotfoundexception   e)   {
                        request.setattribute( "error ",   "上传失败啦 ");
            e.printstacktrace();
            return   actionmapping.findforward( "fail ");
        }
        catch   (ioexception   e)   {
            //   todo   自动生成   catch   块
            request.setattribute( "error ",   "上传失败啦 ");
            e.printstacktrace();


            return   actionmapping.findforward( "fail ");
        }
}
}


这个我action中的   什么地方错了吗?
------------------
actionfrom
private   string   filename;
        private   formfile   file;
       
        public   string   getfilename()   {
                          return   filename;
        }
        public   void   setfilename(string   filename)   {
                          this.filename   =   filename;
        }
          public   formfile   getfile()   {
                          return   file;
        }
        public   void   setfile(formfile   file)   {
                        this.file   =   file;
        }

-----------
上传:   <input   type= "file "   name= "filename "   size= "30 "> <input   type= "submit "   value= "提交 ">
页面   的

什么地方错了嘛
<input   type= "file "   name= "filename "   size= "30 ">   我把name= "filename "改成file会暴错


发表于:2007-08-30 14:58:304楼 得分:10
formfile   file   =   uploadfileform.getfile();                       为null为什么啊
是不是表单的   enctype属性没有设置成multipart/form-data
比如: <form       action= "addad_do.jsp "   method= "post "   enctype= "multipart/form-data ">
发表于:2007-08-30 15:03:565楼 得分:0
我设置了的  
代码如下
<form   name= "formm "   action= "/uploadaction.do "   enctype= "multipart/form-data ">
发表于:2007-08-30 15:05:026楼 得分:10
<input   type= "file "   name= "filename "   size= "30 ">   我把name= "filename "改成file会暴错

当然会报错啦,你的表单对象(即actionform)里有filename属性呀,你该了名称,actionform到哪
找file属性去。
发表于:2007-08-30 15:13:427楼 得分:0
但是我参考的那个帖子什么是设置的   file  
在actionform中也有设置file
发表于:2007-08-30 15:17:078楼 得分:0
system.out.println(uploadfileform.getfile());   为什么这里是空啊
<input   type= "file "   name= "filename "   size= "30 ">   我把name= "filename "改成file会暴错

<input   type= "file "   name= "file ">     name是应该改为 "file ",因为actionfrom里已经有file属性了,只不是不知道你改成这样以后报了什么错?
发表于:2007-08-30 15:20:409楼 得分:0
javax.servlet.servletexception:   beanutils.populate
org.apache.struts.util.requestutils.populate(requestutils.java:1254)
org.apache.struts.action.requestprocessor.processpopulate(requestprocessor.java:821)
org.apache.struts.action.requestprocessor.process(requestprocessor.java:254)
org.apache.struts.action.actionservlet.process(actionservlet.java:1482)
org.apache.struts.action.actionservlet.doget(actionservlet.java:507)
javax.servlet.http.httpservlet.service(httpservlet.java:689)
javax.servlet.http.httpservlet.service(httpservlet.java:802)


root   cause  

java.lang.illegalargumentexception:   argument   type   mismatch
sun.reflect.nativemethodaccessorimpl.invoke0(native   method)


发表于:2007-08-30 15:35:0210楼 得分:0
<input   type= "file "   name= "file ">   肯定是没错的。

把你的formfile   类拿出来看看
发表于:2007-08-30 15:39:3511楼 得分:0
formfile  
我没这个文件啊
这个是到struts的
import   org.apache.struts.upload.formfile;
发表于:2007-08-30 15:49:5512楼 得分:0
system.out.println(uploadfileform.getfile());   为什么这里是空啊
这句会不会有错?uploadfileform.getfile().getfilename();试试
发表于:2007-08-30 15:58:2113楼 得分:0
我只要设置成 <input   type= "file "   name= "file ">     nmae=file
一提交就会暴那个错
根本就过不去
而且我用你说的那样
一样就暴错,说不能从string类型转成formfile类型的
    formfile   file   =   uploadfileform.getfile();                     //那个重要的类
    //要是在哪儿加就暴错
    system.out.println(uploadfileform.getfile().getfilename());
发表于:2007-08-30 16:09:0414楼 得分:20
<html:file   property= "filename "   size= "50 "/> 这样写,
form也改为 <html:form>
用struts标签试试
属性名是filename,因为struts会根据属性名filename去找相应的get,set方法处理数据,而不是对应的属性file,即找到setfilename()和getfilename()来存取数据,
你可以在work目录下面找到相对应的jsp编译后*_jap.java文件的代码调查一下struts的工作原理,或者分析一下源代码
发表于:2007-08-30 16:10:2515楼 得分:0
我看错了,是属性是file,更正一下
发表于:2007-08-30 16:12:2916楼 得分:0
建议取过一个名字,file好像不太好
发表于:2007-08-30 16:27:1117楼 得分:0
我把名字换了filename   一样不   行
那个还是null
另外
a.jsp到   b.jsp   的做法中,那个
smartupload   su   =   new   smartupload();
//上传初始化  
su.initialize(pagecontext);
//设定上传限制  
1、这里的su.initialize(pagecontext);   说的是初始化,但是pagecontext是什么意识啊
我在action中   要报   pagecontext   未定义   请问这个该怎么该了?
我是页面到页面的做法可以
但是放到java文件中就不暴未定义啊
su.initialize(pagecontext);
该怎么去设置?
发表于:2007-08-30 16:52:1618楼 得分:0
http://topic.csdn.net/t/20040706/09/3148676.html

同上:这个帖也是问如何初始化
这个在struts中到底该怎么样去初始化了?
发表于:2007-08-30 17:24:4219楼 得分:0
string   path= "uploads/ ";
      smartupload   uploader=new   smartupload();  
  try{
      uploader.initialize(this.getservlet().getservletconfig(),request,response);//初始化
     
      uploader.setmaxfilesize(302400000);
      uploader.setallowedfileslist( "jpg,gif,jpg,gif ");
      uploader.upload();

        string   filename     =   uploader.getfiles().getfile(0).getfilename();   ////获取文件名
        system.out.println(filename);
        string   fileext     =   uploader.getfiles().getfile(0).getfileext();   ////获取文件名

      //system.out.println(fileext+ "--c <br> "+getname.name_upload());
     
          path   +=   "20070830 "+ ". "+fileext;//完整文件名
          system.out.println(path);
      system.out.println( " <br> "+path);
            uploader.getfiles().getfile(0).saveas(path);//保存在容器目录下

      system.out.print( "上传成功 ");
      system.out.print( "上传成功 ");
        return   actionmapping.findforward( "fail ");
 
    }   catch   (exception   e)   {
    system.out.println(e);
      system.out.print( "上传失败ss ");
    }

            return   actionmapping.findforward( "fail ");
        }

在看这个有什么问题
为什么到
    uploader.upload();
就不能执行了啊
暴错为:
java.lang.negativearraysizeexception
上传失败ss
发表于:2007-08-31 09:27:4620楼 得分:5
请高手出招,帮顶
发表于:2007-08-31 09:48:0521楼 得分:0
就是,谢谢

我好像看到问题,但不知道怎么去解决

1、
formfile   file   =   uploadfileform.getfile();                       为null
好像是我页面设置的那个上传
<input   type= "file "   name= "filename "   size= "30 ">   中的name和actionform中的不一样
没有接收的所以为null
但是我要是设置成一样就要暴
javax.servlet.servletexception:   beanutils.populate
org.apache.struts.util.requestutils.populate(requestutils.java:1254)
org.apache.struts.action.requestprocessor.processpopulate(requestprocessor.java:821)
org.apache.struts.action.requestprocessor.process(requestprocessor.java:254)
org.apache.struts.action.actionservlet.process(actionservlet.java:1482)
org.apache.struts.action.actionservlet.doget(actionservlet.java:507)
javax.servlet.http.httpservlet.service(httpservlet.java:689)
javax.servlet.http.httpservlet.service(httpservlet.java:802)


root   cause  

java.lang.illegalargumentexception:   argument   type   mismatch
sun.reflect.nativemethodaccessorimpl.invoke0(native   method)

找了好多资料   都是设置成一样的   但是没人说有暴错信息出现
这个错该怎么解决啊
发表于:2007-08-31 11:51:5922楼 得分:0
上面的问题解决了,但是有新问题出了来
我现在是用标签做就不会有上面的问题

  string   path= "uploads/ ";
  uploadactionform   uploadactionform   =(uploadactionform)   actionform;
      smartupload   uploader=new   smartupload();  
      system.out.println(uploadactionform.getfilename());
      system.out.println(uploadactionform.getpicnum());
  try{
      uploader.initialize(this.servlet.getservletconfig(),request,response);//初始化
     
      uploader.setmaxfilesize(302400000);
      uploader.setallowedfileslist( "jpg,gif,jpg,gif ");
      uploader.upload();

        string   filename     =   uploader.getfiles().getfile(0).getfilename();   ////获取文件名
        system.out.println(filename);
        string   fileext     =   uploader.getfiles().getfile(0).getfileext();   ////获取文件名

      //system.out.println(fileext+ "-- "+getname.name_upload());
     
          path   +=   "20070830 "+ ". "+fileext;//完整文件名
          system.out.println(path);
     
            uploader.getfiles().getfile(0).saveas(path);//保存在容器目录下

      system.out.print( "上传成功 ");
      system.out.print( "上传成功 ");
        return   actionmapping.findforward( "fail ");
 
    }   catch   (exception   e)   {
    system.out.println(e);
      system.out.print( "上传失败sss ");
    }

            return   actionmapping.findforward( "fail ");
        }

这是我的代码
现在运行到   uploader.upload();这一布就不行了,cpu马上90%多
不在向下运行
请问这个怎么解决啊?
发表于:2007-08-31 14:00:1023楼 得分:0
上传解决了,但是是用的struts自带的上传的
在网上查资料的时候看到一个说法是:jspsmartupload不能用在sturts的action做上传
是嘛?
用那个始终不能上传uploader.upload();就不能在向下运行了

发表于:2007-08-31 15:12:2224楼 得分:5
to   dengdai520()    
  实在不好意思     这几天没来   才看到你的帖子  
我用的上传是struts自带的   上传代码很简单   就那几句  

用smartupload   你试试下面这个初始化方法


public   void   init(servletconfig   config)   throws   servletexception   {
this.config   =   config;
}


smartupload   upload   =   new   smartupload();

upload.initialize(config,   request,   response);


发表于:2007-09-04 15:17:2325楼 得分:0
没事
解决了   我还是用的struts自己带的上传做了
初始话我知道了  
uploader.initialize(this.servlet.getservletconfig(),request,response);//初始化  
那几天在网上找了好了关于用jspsmartupload做上传的
但找到的都是是说jspsmartupload不能用在sturts的action做上传

但不知道是不是真的   但是我测试就到uploader.upload();就不能在向下运行了   cpu   100%
    -   -!
这几天忘了进   现在结贴   谢   大家了


快速检索

最新资讯
热门点击