Esempio n. 1
0
        /// <summary>
        /// Uploads the file.
        /// </summary>
        /// <param name="options">Options.</param>
        public void UploadFile(UploadFileParameters options)
        {
            string retValue = string.Empty;             // Used to store the return value
            Thread thread   = new Thread(() => {
                UploadFileInThread(options);
            });

            myThreads.Add(thread);
            thread.Start();
        }
Esempio n. 2
0
        /// <summary>
        /// Uploads the file in thread.
        /// </summary>
        /// <param name="options">Options.</param>
        private void UploadFileInThread(UploadFileParameters options)
        {
            WebResponse    wRes           = null;
            HttpWebRequest wReq           = null;
            Stream         responseStream = null;
            StreamReader   responseReader = null;
            HTTPCallback   callbacker     = new HTTPCallback();
            Response       sr             = new Response();

            sr.error = null;


            if (options.filesToUpload == null)
            {
                options.filesToUpload = new List <UploadFileInfo>();
            }
            foreach (UploadFileList ufl in options.uploadList)
            {
                string fileName       = GameAnax.Core.IO.File.GetFileNameFromURL(ufl.filePath);
                int    fileNameLength = fileName.Length;
                int    x = ufl.filePath.LastIndexOf(fileName, StringComparison.InvariantCulture);

                string path = ufl.filePath.Left(x);
                Debug.Log(path);
                if (!File.Exists(ufl.filePath))
                {
                    Debug.LogWarning(string.Format("{0} is not available at location {1}", fileName, path));
                    continue;
                }

                byte[] fileData = File.ReadAllBytes(ufl.filePath);
                options.filesToUpload.Add(new UploadFileInfo()
                {
                    contentType = ufl.contentType, fileBytes = fileData, fileName = fileName, uniqueKey = ufl.key
                });
            }

            try {
                callbacker._callback = options.callback;
                string formDataBoundary = String.Format("----------{0:N}", Guid.NewGuid());

                wReq                 = (HttpWebRequest)WebRequest.Create(options.url);
                wReq.ContentType     = "multipart/form-data; boundary=" + formDataBoundary;
                wReq.Method          = "POST";
                wReq.CookieContainer = new CookieContainer();
                wReq.Credentials     = CredentialCache.DefaultCredentials;
                ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(AcceptAllCertifications);

                if (null != options.header && options.header.Count > 0)
                {
                    foreach (string headrKey in options.header.Keys)
                    {
                        wReq.Headers.Add(headrKey, options.header[headrKey].ToString());
                    }
                }

                #region x
                Stream fromStream = new MemoryStream();
                fromStream = CreateMultipartFormData(fromStream, options.postData, formDataBoundary);
                fromStream = CreateMultiPartFileData(fromStream, options.filesToUpload, formDataBoundary);

                // Add the end of the request.  Start with a newline
                string footer = "--" + formDataBoundary + "--\r\n";
                fromStream.Write(_encoding.GetBytes(footer), 0, _encoding.GetByteCount(footer));

                fromStream.Position = 0;
                byte[] formData = new byte[fromStream.Length];
                fromStream.Read(formData, 0, formData.Length);
                fromStream.Close();

                wReq.ContentLength = formData.Length;
                using (var stream = wReq.GetRequestStream()) {
                    stream.Write(formData, 0, formData.Length);
                }


                #endregion
                wRes = wReq.GetResponse();

                callbacker.responseHeader = wRes.Headers;
                responseStream            = wRes.GetResponseStream();
                responseReader            = new StreamReader(responseStream);
                callbacker.webResData     = responseReader.ReadToEnd();
                responseReader.Close();
            } catch (HttpListenerException hlex) {
                sr.status = false;
                sr.error  = new Error();

                sr.error.data            = hlex.Data;
                sr.error.type            = "HttpListenerException";
                sr.error.errorCode       = hlex.ErrorCode;
                sr.error.message         = hlex.Message;
                sr.error.exceptionSource = hlex.Source;
                sr.error.helpLink        = hlex.HelpLink;
                callbacker.webResData    = JsonUtility.ToJson(sr);
            } catch (ProtocolViolationException pvex) {
                sr.status = false;
                sr.error  = new Error();

                sr.error.data            = pvex.Data;
                sr.error.type            = "ProtocolViolationException";
                sr.error.errorCode       = 0;
                sr.error.message         = pvex.Message;
                sr.error.exceptionSource = pvex.Source;
                sr.error.helpLink        = pvex.HelpLink;
                callbacker.webResData    = JsonUtility.ToJson(sr);
            } catch (WebException wex) {
                sr.status = false;
                sr.error  = new Error();

                sr.error.data            = wex.Data;
                sr.error.type            = "WebException";
                sr.error.errorCode       = 0;
                sr.error.message         = wex.Message;
                sr.error.exceptionSource = wex.Source;
                sr.error.helpLink        = wex.HelpLink;
                callbacker.webResData    = JsonUtility.ToJson(sr);
            } catch (Exception ex) {
                sr.status = false;
                sr.error  = new Error();

                sr.error.data            = ex.Data;
                sr.error.type            = "Exception";
                sr.error.errorCode       = 0;
                sr.error.message         = ex.Message;
                sr.error.exceptionSource = ex.Source;
                sr.error.helpLink        = ex.HelpLink;
                callbacker.webResData    = JsonUtility.ToJson(sr);
            } finally {
                if (wRes != null)
                {
                    wRes.Close();
                }
                if (responseReader != null)
                {
                    responseReader.Close();
                }
                if (responseStream != null)
                {
                    responseStream.Close();
                }

                wRes           = null;
                responseReader = null;
                responseStream = null;
            }
            _mainThread.Enqueue(callbacker.ExecuteCallback);
            Thread.CurrentThread.Abort();
        }