想请教个问题 struts 在上传多个文件的时候 form 得到页面所有的FormFile的同时 在form里能不能有自己的方法吧这些流丢到一个list里面呢 ?

解决方案 »

  1.   

    原理上讲,你可以把所有代码都写到一个servlet中!这是可行的,但是不实用。
      

  2.   

    多个文件是可以上传 但是我是想省去我在Action里一个个获取formfile的代码 在form里就直接把所有的file 放在list里 然后后台直接遍历
      

  3.   

    String[] saveimage = new String[4];
    FormFile image1 = (FormFile) voteForm.get("image1");
    FormFile image2 = (FormFile) voteForm.get("image2");
    FormFile image3 = (FormFile) voteForm.get("image3");
    FormFile image4 = (FormFile) voteForm.get("image4"); FormFile[] formFiles = new FormFile[4];
    formFiles[0] = image1;
    formFiles[1] = image2;
    formFiles[2] = image3;
    formFiles[3] = image4;
    String filePath = request.getSession().getServletContext()
    .getRealPath("/")
    + "vote/upload";// 上传文件保存的目录
    for (int i = 0; i < formFiles.length; i++) {
    String fileName = formFiles[i].getFileName();
    if (fileName == null || fileName.equals("")) {
    continue;
    } if (!UploadUtil.checkFileType(formFiles[i].getFileName())) {
    Script.sendMessage(response, GameScript.getAlert(
    "上傳文件格式必需為.jpg或者.gif!!!", "/vote/register.jsp"));
    return;
    } if (!UploadUtil.checkFileSize(formFiles[i].getFileSize())) {
    Script.sendMessage(response, GameScript.getAlert(
    "上傳文件大小不能大於1024*1024!!!", "/vote/register.jsp"));
    return;
    }String newFileName = "";
    int index = fileName.lastIndexOf(".");
    if (index > 0) {
    newFileName = gameUser.getUsername() + "_" + i
    + System.currentTimeMillis()
    + fileName.substring(index, fileName.length());
    // Thread.sleep(300);
    }
    String realPath = filePath + "/" + newFileName;
    // System.out.println("====realPath===" + realPath);
    saveimage[i] = realPath;// 保存没有提交的数据库中的图片路径
    UploadUtil.saveToFile(realPath, formFiles[i].getFileData());// 保存图片
    } public class UploadUtil {
    private static final int MAX_SIZE = 1024 * 1024;
    private static final String[] TYPES = { ".jpg", ".gif", ".png" }; public static boolean checkFileSize(int size) {
    if (size > MAX_SIZE) {
    return false;
    }
    return true;
    } public static boolean checkFileType(String fileName) {
    for (int i = 0; i < TYPES.length; i++) {
    if (fileName.toLowerCase().endsWith(TYPES[i])) {
    return true;
    }
    }
    return false;
    } public static void saveToFile(String fileName, byte[] fileData)
    throws FileNotFoundException, IOException {
    OutputStream o = new FileOutputStream(fileName);
    o.write(fileData);
    o.close();
    }

    public static void main(String[] args) {
    System.out.println("返回值: "+checkFileType("01464_chongyangbridgetw_1920x1200.jpg"));
    }
    }
      

  4.   

    还是写两个form吧  一个上传文件  一个传参数
      

  5.   


    MultipartRequestHandler  multipartRequestHandler  =  form.getMultipartRequestHandler(); //  取得所有上传文件的对象集合                        
    Hashtable  elements  =  multipartRequestHandler.getFileElements();          //  循环遍历每一个文件                         
    Collection  values  =  elements.values();      
    for  (java.util.Iterator  i  =  values.iterator();  i.hasNext();)                          
    {                                     
    file  =  (org.apache.struts.upload.FormFile)  i.next();//  取得上传的文件
    if (file != null && file.getFileSize() > 0) {
    // 防止文件重名的更名策略
    // 获得文件后缀
    String type = file.getFileName().substring(
    file.getFileName().lastIndexOf("."),
    file.getFileName().length());
    num++;
    newName = "accusePic" + "_"+ numTime + "_"+num+type;// 保存的文件名
    filePath = path + "/pictureFile/accusePic/" + newName; // 新增保存路径
    SaveFile.saveFile(file, filePath);
    sb.append(newName+",");
    }
    }
      

  6.   

    呵呵 感谢各位了 我原本的想法就是省去在ACTION 一个一个获取file与filename   form既然是个类 那就能实现我写的接口里定义的方法 在form里实现的时候 方法体即 实现一个list(MAP) 的封装   key=filename     value= file(IO流)   那样后台直接获取LIST 判断遍历 可以省去很多机械的代码。