我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. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>2. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>3. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>4. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>5. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </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)
请问该如何解决?
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. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>2. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>3. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>4. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </td>
<td>5. <input type="file" name="uploadFiles" class="filefieldStyle" /><input type="hidden" name="fileNames"/></td>
</tr>
<tr>
<td> </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)
请问该如何解决?
解决方案 »
- DWR无法获取data
- 关于调用其他系统DLL接口问题,请高手指教
- 请教各位:List<map>型的数据怎么在jsp页面展示出来?用什么标签都可以。
- 大家说说这个网站怎么做的?
- jspsmart 的问题
- java web start如何与javascript交互?
- 请各位推荐一些资源
- 如何利用通过路径连接access数据库
- 300分求助!最近接到几个网站建设的大订单,大家快帮忙估个价(国内市场价和国外市场价),同时征求合作开发者!急!急!急!凡诚心出谋
- 再次请教如何在ultra dev里连接数据库!
- 请问在WEB里面怎么才能用jfreechart控件 里面的类
- 项目在ECLIPSE中编译不了是怎么回事?
改掉,不能只判断是否为null,必须判断这个文件存在否
at cc.iview.baby.web.action.home.UploadPhotoAction.upload(UploadPhotoAction.java:85)自己找原因啊
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,怎么写?