struts2,ext 多文件上传

问题:动态添加file输入框,按照一般,前台可以用[i]数组,Action用List接收

 

 ,struts2会绑定好数据,这时候,文件可以以List获得,但是多文件的name,没法采用这种方法获得List

如:

var imgCount=0;
//         	var attach= Ext.ComponentQuery.query('filefield[name^=attach]');

    		function addFile(){
    			
    			var form = Ext.getCmp("form");  
    			var field=  {
                    	margin:'10px',
                        xtype: 'fieldcontainer',
                        layout: { type: 'hbox' },
                        fieldDefaults: { labelAlign: 'right', labelWidth: 90, width: 290 },
                        //items: [inventoryField ]
                        items: [  {
                            xtype: 'filefield',
//                            name: 'attach['+imgCount+']',
                            name: 'attach',
                            fieldLabel: '图片',
                            allowBlank: false,
                            anchor: '100%',
                            buttonText: '选择图片',
                            emptyText: '--请选择图片--'
                        },{  
                            xtype : 'button',  
                            text : '删除',  
                            iconCls : 'silk_page_add',  
                            handler : function(button ) {  
                            	button .up('#form').remove(button.up('fieldcontainer'));
                            }  
                        }]
                    };
    			form.add(field);
    			
    			imgCount++;
    		}
    		
    		


		});

 解决:

          xtype: 'filefield',
    //    name: 'attach['+imgCount+']', //注释掉
          name: 'attach',

 name不用拼接,直接用同一个name。后台直接以List接收

        private List<File> attach;
	private List<String> attachFileName;
	private List<String> attachContentType;

----------------------------------

上传文件到目录的方法

/**
	 *  上传文件
	 * @param file
	 * @param curUserId
	 * @return 文件相对目录
	 * @throws Exception
	 */
	private String uploadDir(File file,String imageName,String curUserId) throws Exception{
		//基于myFile创建一个文件输入流  
		InputStream is = new FileInputStream(file);  
		String filePath = this.getClass().getClassLoader().getResource("/")
				.getPath();
		int index = filePath.indexOf("webapps");
//		int index = filePath.indexOf("WEB-INF");
		String contentPath = filePath.substring(0, index);
		String savepath = contentPath + "upload" + "/" + curUserId + "/";
		savepath = savepath.replace("%20", " ");
		
		
//		ServletActionContext.getServletContext().getRealPath("img");
		
		// 设置目标文件
		File toFile = new File(savepath);  
		if (!toFile.exists()) {
			toFile.mkdirs();
		}
		Date date = new Date();
//		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmsssss"); 
//		String dateName = formatter.format(date);
		String dateName = UUID.randomUUID().toString();
		String newName = dateName + imageName;
		
		// 创建一个输出流  
		OutputStream os = new FileOutputStream(savepath + newName);  
		//设置缓存  
		byte[] buffer = new byte[1024];  
		int length = 0;  
		//读取myFile文件输出到toFile文件中  
		while ((length = is.read(buffer)) > 0) {  
			os.write(buffer, 0, length);  
		}  
		//关闭输入流  
		is.close();  
		//关闭输出流  
		os.close();
		
		return "/" + curUserId + "/" +  newName;
//		data.setFilePath("/" + curUserId + "/" +  newName);
	}

猜你喜欢

转载自cainiao1923.iteye.com/blog/2287864
今日推荐