/// <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(); }
/// <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(); }