All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.wicp.tams.component.components.Upload Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
package net.wicp.tams.component.components;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

import org.apache.tapestry5.Asset;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.StreamResponse;
import org.apache.tapestry5.annotations.AfterRenderTemplate;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Path;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.commons.Messages;
import org.apache.tapestry5.http.Link;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.ioc.annotations.InjectService;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.AssetSource;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;

import lombok.extern.slf4j.Slf4j;
import net.wicp.tams.common.apiext.IOUtil;
import net.wicp.tams.common.apiext.StringUtil;
import net.wicp.tams.common.constant.PathType;
import net.wicp.tams.common.exception.ExceptAll;
import net.wicp.tams.common.exception.ProjectExceptionRuntime;
import net.wicp.tams.component.SymbolConstantsCus;
import net.wicp.tams.component.assistbean.FilesBean;
import net.wicp.tams.component.services.ISupportedLocales;
import net.wicp.tams.component.tools.TapestryAssist;

/****
 * 文件上传组件,可以支持多个文件的上传,可以显示已上传的多个文件
 * 
 * @author 周俊辉
 * 
 */
public class Upload {
	public static final String prefix = "rjzjhuploadfield";// 上传的文件域
	public static final String prefix_exit = "rjzjhexistfield";// 存在的文件隐藏域Name
	public static final String fixfieldname = "__uploadname__";// 标识上传文件的域的name值,固定的名字

	public String getFixfieldname() {
		return fixfieldname;
	}

	@Inject
	@Path("${path.comassets}/images/add.png")
	@Property
	private Asset addImg;

	@Inject
	@Path("${path.comassets}/images/del.png")
	@Property
	private Asset delImg;
	@InjectService("locales")
	protected ISupportedLocales supportedLocales;
	@Inject
	protected JavaScriptSupport support;
	@Inject
	protected ComponentResources resources;
	@Inject
	protected Messages messages;// 国际化

	/*
	 * @Parameter(value = "prop:componentResources.id", defaultPrefix =
	 * BindingConstants.LITERAL) private String id;
	 */
	@Parameter(defaultPrefix = BindingConstants.LITERAL)
	private String id;

	@Parameter(defaultPrefix = BindingConstants.LITERAL)
	private String name;

	@Environmental
	protected JavaScriptSupport javaScriptSupport;

	@Inject
	private AssetSource assetSource;

	/***
	 * 是否支持多个文件
	 */
	@Parameter(value = "false", defaultPrefix = BindingConstants.LITERAL)
	@Property
	private boolean multi;
	/***
	 * 初始文件地址,多个用","号分隔
	 */
	@Parameter(defaultPrefix = BindingConstants.LITERAL)
	private String initfile;

	public String getFiletag() {
		return prefix;
	}

	public FilesBean[] getInitFiles() {
		if (resources.isBound("initfile") && StringUtil.isNotNull(initfile)) {
			String[] fileStrs = initfile.split(",");
			FilesBean[] rets = new FilesBean[fileStrs.length];
			for (int i = 0; i < fileStrs.length; i++) {
				FilesBean temp = new FilesBean();
				temp.setFileName(fileStrs[i]);
				temp.setPath(IOUtil.mergeFolderAndFilePath(uploadDir, fileStrs[i]));
				temp.setDownLink(getUploadFileLink(fileStrs[i]).toURI());
				rets[i] = temp;
			}
			return rets;
		}
		return new FilesBean[0];
	}

	public StreamResponse onUploadFile(final String filePath) {
		// String filePathTrue=new String(filePath.getBytes("iso8859-1"),"UTF-8");
		// String filePathTrue = URLDecoder.decode(filePath,"UTF-8");
		return TapestryAssist.getFileStreamResponse(uploadDir, filePath);
	}

	public Link getUploadFileLink(String filePath) {
		return resources.createEventLink("uploadFile", filePath);
	}

	/***
	 * 返回前台做为js的url变量
	 * 
	 * @return
	 */
	public String getUploadFileUrl() {
		String retcurl = resources.createEventLink("uploadFile").toURI();
		return retcurl;
	}

	@Property
	private FilesBean initFile = new FilesBean();// 不创建会有异常
	@Property
	private int index;

	public String getInitFileId() {
		return getId() + index;
	}

	@Inject
	@Symbol(SymbolConstantsCus.PATH_FILE_UPLOAD_DIR)
	private String defaultUploadDir;// 默认的文件上传目录,在service里配置

	/***
	 * 初始文件地址,多个用","号分隔
	 */
	@Parameter(defaultPrefix = BindingConstants.LITERAL)
	@Property
	private String uploadDir = PathType.getPath(defaultUploadDir);

	@AfterRenderTemplate
	void afterRenderTemplate() {
		JSONObject spec = new JSONObject();
		spec.put("id", getId() + "_file");// 注意与页面上的file组件的id一致
		spec.put("delImg", delImg.toString());
		spec.put("prefix", getNameFile());
		javaScriptSupport.require("init").invoke("uploadBind").with(spec);
	}

	/****
	 * 得到name属性
	 * 
	 * @return
	 */
	public String getName() {
		if (multi) {// 如果是多个则name参数无效.
			return prefix;
		} else {
			if (!resources.isBound("name")) {
				return prefix;
			} else {
				return this.name;
			}
		}
	}

	// 文件上传域,就是在存储值的field域加上"_file"
	public String getNameFile() {
		return getName() + "_file";
	}

	/***
	 * 得到id
	 * 
	 * @return
	 */
	public String getId() {
		if (!resources.isBound("id") && StringUtil.isNull(id)) {
			id = support.allocateClientId(resources);
		}
		return this.id;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy