虽然也是网络搜刮到的方法不过用起来感觉蛮简单,JS验证的方面就不说了 看看主要代码//源图片路径
String srcUrl1 = ""+Goods_url1+""; 
             
            //目标图片路径             String tarUrl1 = "webapps/ROOT/goodsimg/"+pTitle1+".jpg"; 
                   if (Goods_url1.equals("")) 
{  }
            else
            {
              try {    
      //生成读取图片到内存的输入流
      FileInputStream finput = new FileInputStream(new File(srcUrl1));
      //生成从内存将图片输出到磁盘的输出流  
      FileOutputStream foutput = new FileOutputStream(new File(tarUrl1));
      BufferedOutputStream bos = new BufferedOutputStream(foutput);                 
      int b   ;
      while(true) {     
       if(finput.available()<1024){
        while((b=finput.read())!=-1){
         bos.write(b);
        }
        break;
       }else{ 
        b=finput.read();
        bos.write(b);      
       }    
      }  finput.close();
      bos.close();
      foutput.close() ;
     } catch (FileNotFoundException e) {
       System.out.println(e);       e.printStackTrace();
     } catch (IOException e) {
       System.out.println(e);       e.printStackTrace();
     }  
-------------------------------------
提问高手们:本地上传图片,OK没问题,效率也可以(毕竟我在JS那里限制了只能传300KB的图片)
  问题来了:放到FTP上以后
【//目标图片路径】
 【String tarUrl1 = "webapps/ROOT/goodsimg/"+pTitle1+".jpg"; 】
ok 目标路径应该没问题,相对的FTP目录地址 可是FTP空间日志报错:
【java.io.FileNotFoundException: C:\Documents and Settings\Administrator\桌面\77777777.jpg (系统找不到指定的文件。)
java.io.FileNotFoundException: C:\Documents and Settings\Administrator\桌面\77777777.jpg (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at DAO.management_goodsurl.setmanagement_goodsurl(management_goodsurl.java:52)
at com.struts.action.Goods_TableActionAction.updategoods(Goods_TableActionAction.java:153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)

可以看到 我用struts框架做的 我在action里request的 input type=file 的 源文件路径 不能被找到
我认为程序放到FTP后,程序就在本机的 位置去查找 【C:\Documents and Settings\Administrator\桌面\77777777.jpg 】
而不是在我这里去查找这个路径
 
 请问前辈们  我怎么改才好呢??? 之前有个前辈跟我说 我这样的方法只能实现本地上传 远程的只能用 组件实现。。我确实不想用组件。。求神求高手 小弟谢谢了

解决方案 »

  1.   

    new FileInputStream你要知道这个是哪里来的流,在服务器上,这个路径还是你的机器上传过去的。当然找不到路径,难道别人不知道这样么?还要common-upload这些组件来上传。
      

  2.   

    前辈 那我只能用 组件来实现我的想法了么推荐一种 带预览 容量 大小 限制的 简洁的组件好么 我用的struts框架 
      

  3.   

    你说的什么啊 谁回答我啊
    推荐一种 带预览 容量 大小 限制的 简洁的上传组件好么 我用的struts框架 
      

  4.   

       //生成读取图片到内存的输入流 
        FileInputStream finput = new FileInputStream(new File(srcUrl1)); 
    你直接从服务器读取   C:\Documents and Settings\Administrator\桌面\77777777.jpg  当然不行啦。首先你得接收从客户端传过去的文件流,然后再写入文件,这才叫上传,你那种写法叫本地拷贝。
      

  5.   

    struts不是自带的有文件上传组件吗?
    你google一下struts文件上传 很多例子的