最近由于工作需要 做了一个上传功能 我直接提交到一个jsp 或者 servlet 就没问题但是如果提交到 struts的action  就得不到上传的文件 不知为什么  struts 是 1.2

解决方案 »

  1.   

    不清楚你原来做的上传是怎么做的 会不会是因为struts的过滤器做了些什么呢?
    你可以把上传改成用struts的FormFile做
      

  2.   

    上传的jsp页面追加enctype属性<html:form action="path" enctype="multipart/form-data">
    </html:form>
    将actionForm中追加private FormFile selectFile;
    上传的文件的相关信息就可以通过actionForm.getSelectFile()得到
      

  3.   

    如果是多文件呢,用struts 怎么弄
      

  4.   

     页面的  form 加这个属性 enctype="application/x-www-form-urlencoded"
      

  5.   

    struts1 好像不支持批量上传吧我也不是很清楚。。
      

  6.   

    上传的时候你看看能否映射成FormFile[]属性 说不定就可以多个上传 我没实验过LZ的问题貌似我见过谁问过 但是找不到原来的帖了...
      

  7.   

    我改成FormFile[]试过 ,要出错 也许是我html没写对  不知道怎么写
      

  8.   

    struts可以上传多个,自己配个
      

  9.   

    其实最好的实现是使用Flex+java,可以在线预览: FLEX代码如下:  <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx"
       width="505" height="346" minWidth="955" minHeight="600" backgroundColor="#BCD2EF"
       creationComplete="init()">


    <fx:Script>
    <![CDATA[

    import mx.controls.Alert;
    private var file_upload_personal:FileReference=new FileReference();
    private var file_upload_company:FileReference=new FileReference();

    private function init():void

    {
    file_upload_personal.addEventListener(Event.SELECT,personalselect);
    file_upload_personal.addEventListener(Event.COMPLETE,personalcomplete);

    file_upload_personal.addEventListener(ProgressEvent.PROGRESS,personalprogress);
    file_upload_company.addEventListener(Event.SELECT,companyselect);
    file_upload_company.addEventListener(Event.COMPLETE,companycomplete);

    file_upload_company.addEventListener(ProgressEvent.PROGRESS,companyprogress);

    }
    private function personalselect(event:Event):void
    {


    if(file_upload_personal.name.lastIndexOf(".jpg")==-1&&file_upload_personal.name.lastIndexOf(".jpeg")==-1&&file_upload_personal.name.lastIndexOf(".png")==-1
    &&file_upload_personal.name.lastIndexOf(".gif")==-1&&

    file_upload_personal.name.lastIndexOf(".JPG")==-1&&file_upload_personal.name.lastIndexOf(".JPEG")==-1&&file_upload_personal.name.lastIndexOf(".PNG")==-1
    &&file_upload_personal.name.lastIndexOf(".GIF")==-1

    )
    {
    Alert.show("图片文件不合格!","提示");
    return;
    }
    f_text_personal.text=file_upload_personal.name;

    }
    private function personalcomplete(event:Event):void
    {


    state_personal.text="个人形象照上传完成!";
    image_personal.source="../adminphoto/"+file_upload_personal.name;
    personal_bt.enabled=false;
    }

    private function personalprogress(event:ProgressEvent):void
    {

    state_personal.text="已上传"+event.bytesLoaded+"字节,共"+event.bytesTotal+"字节";

    var proc:uint=event.bytesLoaded/event.bytesTotal*100;
    bar_personal.setProgress(proc,100);
    bar_personal.label="当前进度:"+"" +proc+"%";
    }

    private function personalupload():void
    {
    var request:URLRequest=new URLRequest("../UploadPhoto");

    try
    {
    file_upload_personal.upload(request);

    }catch(error:Error)
    {

    Alert.show(error.message,"错误信息");
    }



    }
    //company
    private function companyselect(event:Event):void
    {


    if(file_upload_company.name.lastIndexOf(".jpg")==-1&&file_upload_company.name.lastIndexOf(".jpeg")==-1&&file_upload_company.name.lastIndexOf(".png")==-1
    &&file_upload_company.name.lastIndexOf(".gif")==-1&&

    file_upload_company.name.lastIndexOf(".JPG")==-1&&file_upload_company.name.lastIndexOf(".JPEG")==-1&&file_upload_company.name.lastIndexOf(".PNG")==-1
    &&file_upload_company.name.lastIndexOf(".GIF")==-1

    )
    {
    Alert.show("图片文件不合格!","提示");
    return;
    }
    f_text_company.text=file_upload_company.name;

    }
    private function companycomplete(event:Event):void
    {


    state_company.text="店铺形象照片上传完成!";
    image_company.source="../adminphoto/"+file_upload_company.name;
    company_bt.enabled=false;
    }

    private function companyprogress(event:ProgressEvent):void
    {

    state_company.text="已上传"+event.bytesLoaded+"字节,共"+event.bytesTotal+"字节";

    var proc:uint=event.bytesLoaded/event.bytesTotal*100;
    bar_company.setProgress(proc,100);
    bar_company.label="当前进度:"+"" +proc+"%";
    }

    private function companyupload():void
    {
    var request:URLRequest=new URLRequest("../UploadShopPhoto");

    try
    {
    file_upload_company.upload(request);

    }catch(error:Error)
    {

    Alert.show(error.message,"错误信息");
    }



    }



    ]]>
    </fx:Script>


    <s:Button label="上传个人靓照" x="267" y="201" click="file_upload_personal.browse()"/> 
    <s:TextInput id="f_text_personal" x="46" y="199" width="196"/>
    <s:TextInput id="f_text_company" x="42" y="273" width="183"/>
    <s:Button  x="263" y="274" width="104" label="上传店铺形象照" click="file_upload_company.browse()"/>
    <s:Image id="image_personal" x="46" y="5" width="196" height="150"/>
    <s:Image id="image_company" x="269" y="6" width="199" height="149"/>
    <mx:ProgressBar id="bar_personal" x="59" y="229" width="251" height="37"/>
    <mx:ProgressBar id="bar_company" x="59" y="302" width="251"/>
    <s:Label id="state_personal" x="46" y="163" width="196" height="19" color="#E60E0E" fontSize="14"/>
    <s:Label id="state_company" x="269" y="163" width="199" height="19" color="#E10B0B" fontSize="14"/>
    <s:Button id="personal_bt" x="374" y="201" label="上传" click="personalupload()"/>
    <s:Button id="company_bt" x="380" y="274" label="上传" click="companyupload()"/>
    </s:Application>
    java服务器端:
    package com.eShop.servlet;import java.io.File;import java.io.IOException;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;import com.eShop.util.Constants;
    import com.eShop.util.Tools;/**
     * Servlet implementation class for Servlet: UploadPhoto
     *姜鹏,2011-9-8,用于处理管理员形象照片和店铺照片的类。
     */
     public class UploadPhoto extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet 
     {
       static final long serialVersionUID = 1L;
       
    public UploadPhoto() 
    {
    super();
    }   


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {

    try
    {
     
     request.setCharacterEncoding("UTF-8");
     String uploadPath=request.getRealPath("/adminphoto");
     HttpSession session=request.getSession();
     System.out.println("uploadPath:"+uploadPath);
     int maxPostSize=1000*1024*1024;
     File file_dir=new File(uploadPath);
     if(!file_dir.exists())
     {
     
     file_dir.mkdirs();
     }
     
     DiskFileItemFactory factory=new DiskFileItemFactory();
     factory.setSizeThreshold(4096);
     ServletFileUpload upload=new ServletFileUpload(factory);
     upload.setSizeMax(maxPostSize);
     
     List fileItems=upload.parseRequest(request);
     Iterator iterator=fileItems.iterator();
     while(iterator.hasNext())
     {
     FileItem item=(FileItem)iterator.next();
     if(!item.isFormField())
     {
     
     String name=item.getName();
     
     item.write(new File(uploadPath+"//"+name));
     
     if(session.getAttribute(Constants.ADMIN_PHOTO)!=null)
     {
     
     session.removeAttribute(Constants.ADMIN_PHOTO);
     }
     session.setAttribute(Constants.ADMIN_PHOTO, name);
     break;//只上传一个文件,故退出。
     }
     }
     
     
    }
    catch(Exception e)
    {

    e.printStackTrace();
    }

    }  

    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {
    this.doGet(request, response);
    }           
    }上传时将上传后的文件放在一个session中,再在JSP页面得到这个图片名称,保存在数据库中。