由于Struts收集到的多文件返回的是一个hashtable对象键值是html里面file标签的name属性现在的问题就是:我的表单上有一个 “产品图片”输入域,后面接的是这个file标签。之后有一个按钮,动态增加 一行我希望将“产品图片”上面的值,当做file标签的name,也就是当做hashtable里面的键值,传到action里面进行处理。请问我该如何实现。严格来说是一个JS的问题。。感谢各位高手帮忙。
解决方案 »
- model如何复制
- 关于spring,hibernate整合中的事务提交问题
- JFreeChart的X轴Y轴值设定
- 急, struts项目 想配置index.do为首页面 怎么配置? 不能转发!
- 大家来讨论讨论,struts怎么不做一些和asp.net中的广告,分页控件相似的控件呢?
- SSH过滤登录问题
- struts问题
- 基于J2EE的数据访问
- struts中如何调用javascript
- 刚刚学spring Error creating bean & Invalid property 'numb01' of bean class
- SSH搭建环境时,mysql中怎么没出来表啊??
- 想问下服务器端验证一般在哪一层进行?
后台action中使用数组或者list接收 循环处理.前台注意js验证。
写了一个小demo
标签,你可以自己写js操作 dom来实现,也可以使用现成的东西,比如jquery-multiple-plugin 这个基于jquery的插件来进行.例如你前台通过这个插件生成多个上传的标签
<input type="file" id="uploadFile" name="uploadFile"/>
<input type="file" id="uploadFile" name="uploadFile"/>
<input type="file" id="uploadFile" name="uploadFile"/>
...你的action中循环遍历,然后上传就可以了. //使用列表来接收上传文件
private List<File> uploadFile;
private List<String> uploadFileContentType;
private List<String> uploadFileFileName;
//getter和setter方法省略,注意文件命名的规则 uploadFile和标签中的name对应
//上传
if (fileCount > 0) {
for (int i = 0; i < uploadFile.size(); i++) { if (null != uploadFileFileName.get(i) && uploadFileFileName.get(i).trim().length() > 0) {
ai = new ActivityImage(); String tempFileName = CommonUtils.reName(uploadFileFileName.get(i));
String dir = ServletActionContext.getServletContext().getRealPath("/upload/activity");
File dirs = new File(dir);
if (!dirs.exists()) {
dirs.mkdir();
} String picturePath = dir + "/" + tempFileName;
File imageFile = new File(picturePath);
try {
//这里进行IO操作,拷贝文件流,你自己完成就行了 } catch (Exception e) {
e.printStackTrace();
}
}
}
}
file中的id一定要是唯一不重复的,这个插件生成的id都不一样,但name肯定一样..你自己写js也注意。
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
/*
* PicForm pForm=(PicForm)form; FormFile file=pForm.getFile();
* //获取上传的绝对路径 String
* path=this.getServlet().getServletContext().getRealPath("/upload");
* //获取文件名 String
* filename=System.currentTimeMillis()+file.getFileName(); //上传的绝对路径
* String filepath=path+"/"+filename; try { FileOutputStream fos=new
* FileOutputStream(filepath); fos.write(file.getFileData());
* fos.flush(); fos.close(); System.out.println("上传成功"); } catch
* (Exception e) { // TODO: handle exception }
*/
try {
String dir = servlet.getServletContext().getRealPath("/upload");
// String path = this.getServlet().getServletContext().getRealPath(
// "/img");
DiskFileUpload dfu = new DiskFileUpload();
// 设置上传数据的最大大小为10M。
dfu.setSizeMax(0xA00000); // 设置内存缓冲区的阀值为512K。
dfu.setSizeThreshold(0x80000); // 设置临时存储文件的目录为E:\fileupload。
dfu.setRepositoryPath("E:\\fileupload"); // 得到FileItem对象的列表。
List fileItems = null; fileItems = dfu.parseRequest(request);
Iterator it = fileItems.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
String filename = new String(item.getName().getBytes(
"ISO8859-1"), "utf-8");
// System.out.println(item.getName() + item.getContentType()
// + item.getFieldName());
System.out.println(item.getContentType());
System.out.println(filename.substring(filename.lastIndexOf(".")));
String filepath = dir + "/" + filename.substring(filename.lastIndexOf("\\"));
item.write(new File(filepath));
System.out.println("success");
}
} catch (Exception e) {
e.printStackTrace();
} return null;
}
楼主参考下,希望对你有帮助