internal IDictionary <string, object> GetMetaData(FileState state, Stream data)
        {
            IDictionary <string, object> rtn = new Dictionary <string, object>();

            if (state.MetaData != null)
            {
                foreach (var meta in state.MetaData)
                {
                    rtn.Add(meta.Key, meta.Value);
                }
            }
            MergeDic(rtn, "mime_type", AVFile.GetMIMEType(state.Name));
            MergeDic(rtn, "size", data.Length);
            MergeDic(rtn, "_checksum", GetMD5Code(data));
            if (AVUser.CurrentUser != null)
            {
                if (AVUser.CurrentUser.ObjectId != null)
                {
                    MergeDic(rtn, "owner", AVUser.CurrentUser.ObjectId);
                }
            }

            //if (this.IsExternal)
            //{
            //    MergeDic(rtn, "__source", "external");
            //}

            return(rtn);
        }
        internal static Task <Tuple <HttpStatusCode, IDictionary <string, object> > > GetFileToken(FileState fileState, CancellationToken cancellationToken)
        {
            Task <Tuple <HttpStatusCode, IDictionary <string, object> > > rtn;
            string currentSessionToken = AVUser.CurrentSessionToken;
            string str = fileState.Name;
            IDictionary <string, object> parameters = new Dictionary <string, object>();

            parameters.Add("name", str);
            parameters.Add("key", GetUniqueName(fileState));
            parameters.Add("__type", "File");
            parameters.Add("mime_type", AVFile.GetMIMEType(str));
            parameters.Add("metaData", fileState.MetaData);

            rtn = AVClient.RequestAsync("POST", new Uri("/fileTokens", UriKind.Relative), currentSessionToken, parameters, cancellationToken);

            return(rtn);
        }
        internal Task <Tuple <HttpStatusCode, IDictionary <string, object> > > GetQiniuToken(FileState state, CancellationToken cancellationToken)
        {
            Task <Tuple <HttpStatusCode, IDictionary <string, object> > > rtn;
            string currentSessionToken = AVUser.CurrentSessionToken;
            string str = state.Name;

            IDictionary <string, object> parameters = new Dictionary <string, object>();

            parameters.Add("name", str);
            parameters.Add("key", state.CloudName);
            parameters.Add("__type", "File");
            parameters.Add("mime_type", AVFile.GetMIMEType(str));

            state.MetaData = GetMetaData(state, state.frozenData);

            parameters.Add("metaData", state.MetaData);

            rtn = AVClient.RequestAsync("POST", new Uri("qiniu", UriKind.Relative), currentSessionToken, parameters, cancellationToken);

            return(rtn);
        }