struts2上传多个文件时,上传控件的name属性必须一致,然后action内部通过这个name获得一个file数组。遍历数组,得到每个上传文件,但是这有一个问题就是加入每个文件是存在差异的,而这个差异是由上传端的上传控件input的id决定的,有什么办法能分辨哪个文件是由谁传来的?这个功能有很实际的需求,比如我论坛发帖,我上传了多个图片附件,然后插入到帖子里去,这明显是由顺序的,怎么识别这个顺序

解决方案 »

  1.   

    上传时,把对应的File对象存到一个map中不就行了么、、、、、
      

  2.   

    请教怎么实现,我看到所有关于struts2处理多文件上传时都提到,上传这个过程不是struts2做的,你点上传的时候文件就全上去了,然后系统自动读取了上传的文件,生成了那个file对象数组,你能做的只是把这个file对象数组里的数据保存到文件里去,也就是说这个file对象数组根本不是你能手动生成的,而且你根本无法控制上传过程
      

  3.   

    请教怎么实现,我看到所有关于struts2处理多文件上传时都提到,上传这个过程不是struts2做的,你点上传的时候文件就全上去了,然后系统自动读取了上传的文件,生成了那个file对象数组,你能做的只是把这个file对象数组里的数据保存到文件里去,也就是说这个file对象数组根本不是你能手动生成的,而且你根本无法控制上传过程name属性可以不一样啊,干嘛非得一样,为了在action中好处理???
      

  4.   

    请教怎么实现,我看到所有关于struts2处理多文件上传时都提到,上传这个过程不是struts2做的,你点上传的时候文件就全上去了,然后系统自动读取了上传的文件,生成了那个file对象数组,你能做的只是把这个file对象数组里的数据保存到文件里去,也就是说这个file对象数组根本不是你能手动生成的,而且你根本无法控制上传过程name属性可以不一样啊,干嘛非得一样,为了在action中好处理???
    我就没找到一点关于name不一样时action里如何处理的例子,麻烦给个例子
      

  5.   

    真要按你的要求,我给你一个例子吧
    jsp如下:
    <form action="uploadAction" method="post" enctype="multipart/form-data">
    file1: <input type="file" name="file"><br>
    file2: <input type="file" name="file"><br>
    file3: <input type="file" name="file"><br>
    file4: <input type="file" name="file"><br>
    file5: <input type="file" name="file"><br>
    <input type="submit">
    </form>
    对应的action部分代码如下:
    private List<File> file;
    private java.util.List<String> fileFileName;
    private java.util.List<String> fileContentType; public String execute() throws Exception {

     for (int i = 0; i < file.size(); i++)
             {
                 java.io.InputStream is = new java.io.FileInputStream(file.get(i));
                 java.io.OutputStream os = new java.io.FileOutputStream(
                         "E:\\upload\\" + fileFileName.get(i));
                 byte buffer[] = new byte[8192];
                 int count = 0;
                 while ((count = is.read(buffer)) > 0)
                 {
                     os.write(buffer, 0, count);
                 }
                 os.close();
                 is.close();
             }
    return SUCCESS;
    }这里的file,fileFileName,fileContentType按你jsp中file组件的name属性来设置,
    比好你的name="XXX",那么对应的就是:XXX,XXXFileName,XXXContentType。另外不要忘了set和get方法这样动行之后,就能在对应的路径找到对应的上传文件,名字和格式一点没有变,这样就满足你要求了吧???
      

  6.   

    你完全没听懂我的意思,你这就是网上通行的多文件上传做法,问题在于file1-file5控件上传的文件是在同一个目录下的,上传上去后,我要怎么知道每个文件是由哪个控件上传上来的?因为每个控件所代表的目的不一样
      

  7.   

    简单啊,你用jquery或js在jsp页面把file顺序排好就行了
      

  8.   

    能不能设置隐藏域,将每个上传控件的id与所选文件名以特定方式连接起来,保存在隐藏域中,提交后,action中获得隐藏域的值,再去解析这字符串,看每个id对应哪个文件名。我只能想到这个方法了,要不然就设置name属性不一样。所学尚浅,只能想到这里了,睡觉去
      

  9.   

    你完全没听懂我的意思,你这就是网上通行的多文件上传做法,问题在于file1-file5控件上传的文件是在同一个目录下的,上传上去后,我要怎么知道每个文件是由哪个控件上传上来的?因为每个控件所代表的目的不一样额明白了这种需求我还真没写过,我也是菜鸟,能为你做的也只有这些了,呵呵呵,坐等高手
      

  10.   

    这种方法很可行,你把文本域和对应的文件名丢到一个数组或者JSON里面,传到后台就行了,页面就监听文本框的选择事件,选择一个就往那个数组丢一个,修改也要和数组同步,后台根据文件名和这个数组来排序就好了。