/// <summary> /// Загрузчик файлов /// </summary> /// <param name="FileByte">Массив byte файла</param> /// <param name="NameFile">Название файла</param> /// <returns>Информация о загруженном файле</returns> public static InfoFile UploadHendler(byte[] FileByte, string NameFile) { DatKeys keys = GetKeysData(); InfoFile infoFile = new InfoFile(); Dictionary <string, object> keyValuePairs = new Dictionary <string, object>(0) { { Setting.Search__sessionid, keys._sessionid }, { Setting.Search_cTracker, keys.cTracke }, { Setting.Search_maxChunkSize, keys.maxChunkSize }, { Setting.Search_fileFolder, keys.fileFolder }, { "files[]", new FormUpload.FileParameter(FileByte, NameFile + ".txt", "application/octet-stream") } }; var Resul = FormUpload.MultipartFormDataPost(keys.Url, Setting.UserAgent, keyValuePairs); string StrRes; using (StreamReader stream = new StreamReader(Resul.GetResponseStream(), Encoding.GetEncoding(Resul.CharacterSet))) { StrRes = System.Text.RegularExpressions.Regex.Unescape(stream.ReadToEnd()); } infoFile.delete_url = ParsJson(StrRes, "delete_url"); infoFile.error = ParsJson(StrRes, "error"); infoFile.info_url = ParsJson(StrRes, "info_url"); infoFile.name = ParsJson(StrRes, "name"); if (infoFile.name.Contains('.')) { infoFile.name = infoFile.name != null?infoFile.name.Substring(0, infoFile.name.LastIndexOf('.')) : infoFile.name; } infoFile.size = ParsJson(StrRes, "size"); infoFile.stats_url = ParsJson(StrRes, "stats_url"); infoFile.url = ParsJson(StrRes, "url"); return(infoFile); }
/// <summary> /// Получение одноразовых ключей для загрузки файла /// </summary> /// <returns>Набор ключей</returns> private static DatKeys GetKeysData() { // Получения HTml главной станицы загрузки string Html = (new WebClient()).DownloadString(Setting.UrlHomePage); DatKeys datKeys = new DatKeys(); // Поиск переменных // Поиск ссылки string Resul = Html.Remove(0, Html.IndexOf(Setting.Search_Script)); Resul = Resul.Remove(Resul.IndexOf('\''), Resul.Length - Resul.IndexOf('\'')); datKeys.Url = Resul; // Поиск название папки (обычно он null) Resul = Html.Remove(0, Html.IndexOf(Setting.Search_fileFolder)); datKeys.fileFolder = Resul.Substring(Resul.IndexOf('\'') + 1, Resul.Remove(0, Resul.IndexOf('\'') + 1).IndexOf('\'')); // Поиск maxChunkSize (хз для чего он) Resul = Html.Remove(0, Html.IndexOf(Setting.Search_browserXHR2Support)); Resul = Resul.Remove(0, Resul.IndexOf(Setting.Search_maxChunkSize)); Resul = Resul.Substring(Resul.IndexOf('=') + 1, Resul.IndexOf(';') - (Resul.IndexOf('=') + 1)); datKeys.maxChunkSize = Convert.ToUInt32(Resul); // Поиск _sessionid (какой то личный индификатор "сессии") Resul = Html.Remove(0, Html.IndexOf(Setting.Search__sessionid)); datKeys._sessionid = Resul.Substring(Resul.IndexOf('\'') + 1, Resul.Remove(0, Resul.IndexOf('\'') + 1).IndexOf('\'')); // Поиск cTracke (какой то ещё один ключ) Resul = Html.Remove(0, Html.IndexOf(Setting.Search_cTracker)); datKeys.cTracke = Resul.Substring(Resul.IndexOf('\'') + 1, Resul.Remove(0, Resul.IndexOf('\'') + 1).IndexOf('\'')); return(datKeys); }