package org.dromara.settlement.domain.qiniu;

import java.io.Serializable;

/**
 * 千牛上传文件，上传策略
 *
 * @author 张涛(370017892@qq.com)
 * @date 2014-7-3
 *
 */
public class UploadPolicy implements Serializable {

	// 目标资源空间
	private String scope;

	public UploadPolicy() {
	}

	public UploadPolicy(String scope, String callbackUrl, String callbackBody,
			String returnUrl, String returnBody, String endUser,
			String saveKey, int insertOnly, int detectMime, long fsizeLimit,
			String persistentNotifyUrl, String persistentOps, long deadline) {
		super();
		this.scope = scope;
		this.callbackUrl = callbackUrl;
		this.callbackBody = callbackBody;
		this.returnUrl = returnUrl;
		this.returnBody = returnBody;
		this.endUser = endUser;
		this.saveKey = saveKey;
		this.insertOnly = insertOnly;
		this.detectMime = detectMime;
		this.fsizeLimit = fsizeLimit;
		this.persistentNotifyUrl = persistentNotifyUrl;
		this.persistentOps = persistentOps;
		this.deadline = deadline;
	}

	/*
	 * 上传成功后，七牛云向App-Server发送POST请求的URL (必须是公网上可以正常进行POST请求并能响应HTTP/1.1 200
	 * OK的有效URL) 返回包 Content-Type 为 "application/json"，即返回的内容必须是合法的 JSON 文本
	 */
	private String callbackUrl;

	/*
	 * 上传成功后，七牛云向App-Server发送POST请求的数据 支持魔法变量和自定义变量。callbackBody 要求是合法的 url
	 * query
	 * string。如：key=$(key)&hash=$(etag)&w=$(imageInfo.width)&h=$(imageInfo.
	 * height)。
	 */
	private String callbackBody;

	/*
	 * Web端文件上传成功后，浏览器执行303跳转的URL 通常用于HTML Form上传。
	 * 文件上传成功后会跳转到<returnUrl>?upload_ret=<queryString>,
	 * <queryString>包含returnBody内容。 如不设置returnUrl，则直接将returnBody的内容返回给客户端。
	 */
	private String returnUrl;

	/*
	 * 上传成功后，自定义七牛云最终返回給上传端（在指定returnUrl时是携带在跳转路径参数中）的数据 支持魔法变量和自定义变量。returnBody
	 * 要求是合法的 JSON 文本。如：{"key": $(key), "hash": $(etag), "w":
	 * $(imageInfo.width), "h": $(imageInfo.height)}。
	 */
	private String returnBody;

	/*
	 * 唯一属主标识 特殊场景下非常有用，比如根据App-Client标识给图片或视频打水印。
	 */
	private String endUser;

	/*
	 * 自定义资源名 支持魔法变量及自定义变量。这个字段仅当用户上传的时候没有主动指定key的时候起作用。
	 */
	private String saveKey;

	public String getScope() {
		return scope;
	}

	public void setScope(String scope) {
		this.scope = scope;
	}

	public String getCallbackUrl() {
		return callbackUrl;
	}

	public void setCallbackUrl(String callbackUrl) {
		this.callbackUrl = callbackUrl;
	}

	public String getCallbackBody() {
		return callbackBody;
	}

	public void setCallbackBody(String callbackBody) {
		this.callbackBody = callbackBody;
	}

	public String getReturnUrl() {
		return returnUrl;
	}

	public void setReturnUrl(String returnUrl) {
		this.returnUrl = returnUrl;
	}

	public String getReturnBody() {
		return returnBody;
	}

	public void setReturnBody(String returnBody) {
		this.returnBody = returnBody;
	}

	public String getEndUser() {
		return endUser;
	}

	public void setEndUser(String endUser) {
		this.endUser = endUser;
	}

	public String getSaveKey() {
		return saveKey;
	}

	public void setSaveKey(String saveKey) {
		this.saveKey = saveKey;
	}

	public int getInsertOnly() {
		return insertOnly;
	}

	public void setInsertOnly(int insertOnly) {
		this.insertOnly = insertOnly;
	}

	public int getDetectMime() {
		return detectMime;
	}

	public void setDetectMime(int detectMime) {
		this.detectMime = detectMime;
	}

	public long getFsizeLimit() {
		return fsizeLimit;
	}

	public void setFsizeLimit(long fsizeLimit) {
		this.fsizeLimit = fsizeLimit;
	}

	public String getPersistentNotifyUrl() {
		return persistentNotifyUrl;
	}

	public void setPersistentNotifyUrl(String persistentNotifyUrl) {
		this.persistentNotifyUrl = persistentNotifyUrl;
	}

	public String getPersistentOps() {
		return persistentOps;
	}

	public void setPersistentOps(String persistentOps) {
		this.persistentOps = persistentOps;
	}

	public long getDeadline() {
		return deadline;
	}

	public void setDeadline(long deadline) {
		this.deadline = deadline;
	}

	/*
	 * 限定为“新增”语意 如果设置为非0值，则无论scope设置为什么形式，仅能以新增模式上传文件。
	 */
	private int insertOnly;

	/*
	 * 开启MimeType侦测功能 设为非0值，则忽略上传端传递的文件MimeType信息，使用七牛服务器侦测内容后的判断结果
	 * 默认设为0值，如上传端指定了MimeType则直接使用该值，否则按如下顺序侦测MimeType值： 1. 检查文件扩展名 2. 检查Key扩展名
	 * 3. 侦测内容。
	 */
	private int detectMime;

	/*
	 * 限定上传文件的大小，单位：字节（Byte） 超过限制的上传内容会被判为上传失败，返回413状态码。
	 */
	private long fsizeLimit;

	/*
	 * 接收预转持久化结果通知的URL 必须是公网上可以正常进行POST请求并能响应HTTP/1.1 200 OK的有效URL。
	 */
	private String persistentNotifyUrl;

	/*
	 * 资源上传成功后触发执行的预转持久化处理指令列表 每个指令是一个API规格字符串，多个指令用“;”分隔。
	 */
	private String persistentOps;

	/*
	 * 上传请求授权的截止时间 UNIX时间戳，单位：秒。
	 */
	private long deadline;
}
