我action的代码是:private File[] uploadFiles; private String[] fileNames; private Album album; private String privilege; private IAlbumService albumService; @Override
public String execute() throws Exception {
Family family = (Family) ActionContext.getContext().getSession().get("loginFamily");
if (family == null) {
return LOGIN;
}
List<Photo> uploadPhotos = new ArrayList<Photo>(5);
Date date = new Date();
String ipAddress = ServletActionContext.getRequest().getRemoteAddr();
if (uploadFiles.length > 0) {
for (int i = 0; i < uploadFiles.length; i++) {
try {
if(uploadFiles[i] != null){
uploadPhotos.add(upload(uploadFiles[i], fileNames[i], family, ipAddress, date));
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 保存相片到数据库
uploadPhotos = albumService.addPhotos(uploadPhotos);
// 将上传信息保存在seesion中
ActionContext.getContext().getSession().put("uploadPhotos", uploadPhotos);
return SUCCESS;
} else {
return ERROR;
}
} /**
 * 处理上传文件
 * 
 * @param file
 * @param family
 * @param ipAddress
 * @param date
 * @return
 * @throws Exception
 */
private Photo upload(File file, String fileName, Family family, String ipAddress, Date date)
throws Exception {
Photo photo = new Photo();
photo.setAlbum(album);
photo.setFamily(family);
photo.setIpAddress(ipAddress);
int index = fileName.lastIndexOf("\\");
index = index > 0 ? (index + 1) : 0;
photo.setPhotoName(fileName.substring(index, fileName.lastIndexOf(".")));
photo.setUploadTime(date);
ImageUpload imageUpload = new ImageUpload(file, ContextUtil.getSystemGlobal().getPhotoUploadPath(),
ServletActionContext.getServletContext());
photo.setPhotoPath(imageUpload.uploadImages());
photo.setPreviewPath(imageUpload.compressJpg(200, 200));
return photo;
}页面上为:<form action="uploadPhoto.action" method="post" enctype="multipart/form-data" onsubmit="return validateUpload(this);">
      <table cellpadding="0">
          <tr>
            <td class="centerTd boldFont">选择相片:</td>
              <td>1.&nbsp;&nbsp;<input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
          </tr>
          <tr>
              <td>&nbsp;</td>
              <td>2.&nbsp;&nbsp;<input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
            </tr>
          <tr>
              <td>&nbsp;</td>
              <td>3.&nbsp;&nbsp;<input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
          </tr>
          <tr>
              <td>&nbsp;</td>
              <td>4.&nbsp;&nbsp;<input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
              <td>5.&nbsp;&nbsp;<input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input type="submit" name="button"  value="上传照片" />
                <input type="button" value="返 回" onclick="window.history.back();"/></td>
          </tr>
      </table>
      </form>一次最多可以上传5张图片,可是如果把第一个input空着,或者第一个填了,第二个空着,第三个填,这样就会报错:
11:46:42,312  WARN MultiPartRequest:77 - Item is a file upload of 0 size, ignoring
11:46:42,312  WARN MultiPartRequest:77 - Item is a file upload of 0 size, ignoring
11:46:42,312  WARN MultiPartRequest:77 - Item is a file upload of 0 size, ignoring
11:46:42,328  WARN MultiPartRequest:77 - Item is a file upload of 0 size, ignoring
11:46:42,328  INFO FileUploadInterceptor:219 - File uploadFiles image/pjpeg 6.jpg javax.servlet.context.tempdir\upload__7e2fb8b5_11a51726caa__8000_00000099.tmp
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1938)
at cc.iview.baby.web.action.home.UploadPhotoAction.upload(UploadPhotoAction.java:85)
at cc.iview.baby.web.action.home.UploadPhotoAction.execute(UploadPhotoAction.java:51)
请问该如何解决?

解决方案 »

  1.   

     if(uploadFiles[i] != null){
    改掉,不能只判断是否为null,必须判断这个文件存在否
      

  2.   

    java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at cc.iview.baby.web.action.home.UploadPhotoAction.upload(UploadPhotoAction.java:85)自己找原因啊
      

  3.   

    我的action中是这样:public String execute() throws Exception {
    Family family = (Family) ActionContext.getContext().getSession().get("loginFamily");
    if (family == null) {
    return LOGIN;
    }
    List<Photo> uploadPhotos = new ArrayList<Photo>(5);
    Date date = new Date();
    String ipAddress = ServletActionContext.getRequest().getRemoteAddr();
    //当上传文件从第二个组件开始时会出现异常,原因在于fileNames的大小每次都为5,而uploadFiles只有你选择了几个文件大小就为多少
    List<String> list = new ArrayList<String>();
    for(int j = 0;j<5;j++){
    if(fileNames[j].trim().length()>0){
    list.add(fileNames[j]);
    }
    }
    for (int i = 0; i < uploadFiles.length; i++) {
    try {
    uploadPhotos.add(upload(uploadFiles[i], list.get(i), family, ipAddress, date));
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    // 保存相片到数据库
    uploadPhotos = albumService.addPhotos(uploadPhotos);
    // 将上传信息保存在seesion中
    ActionContext.getContext().getSession().put("uploadPhotos", uploadPhotos);
    return SUCCESS;
    } /**
     * 处理上传文件
     * 
     * @param file
     * @param family
     * @param ipAddress
     * @param date
     * @return
     * @throws Exception
     */
    private Photo upload(File file, String fileName, Family family, String ipAddress, Date date)
    throws Exception {
    Photo photo = new Photo();
    photo.setAlbum(album);
    photo.setFamily(family);
    photo.setIpAddress(ipAddress);
    int index = fileName.lastIndexOf("\\");
    index = index > 0 ? (index + 1) : 0;
    photo.setPhotoName(fileName.substring(index, fileName.lastIndexOf(".")));
    photo.setUploadTime(date);
    ImageUpload imageUpload = new ImageUpload(file, ContextUtil.getSystemGlobal().getPhotoUploadPath(),
    ServletActionContext.getServletContext());
    photo.setPhotoPath(imageUpload.uploadImages());
    photo.setPreviewPath(imageUpload.compressJpg(200, 200));
    return photo;
    }可否在action中加段代码验证上传图片大小是否大于5M,怎么写?