В этом треде я попробую в программирование, а Двощ мне будет в этом помогать. Итак ХеллоуВорлд тред!.Задача написать код для отправки нескольких файлов на сервер маленькими кусками. JS и C# координируются в этом треде.
Bump
>>166105721 (OP)Вот что я уже накодил:<h2>File Upload</h2> <input type="file" id="fileinput1" multiple /> <button type="button" id="submitbutton">Upload</button>
>>166105780Переходим собсна к скрипту:Находим файлинпут и кнопку отправки<script> var fileinput = document.getElementById("fileinput1"); var btn = document.getElementById("button1"); </script>
>>166105943Так, я добавил еще текстовое поле для информирования и перешел к перебору файлов в цикле. var fileinput = document.getElementById("fileinput1"); var btn = document.getElementById("button1"); var txt = document.getElementById("txt1"); btn.onclick = function () { txt.innerText = ""; if (fileinput.files.length == 0) { txt.innerText = "Select one or more files."; } else { for (var i = 0; i < fileinput.files.length; i++) { var file = fileinput.files; } } }
>>166106803Получилось типа того. Теперь надо нарезать файл на мелкие кусочки, чтобы отправлять его на сервер.
Возьми реакт. Облегчи себе жизнь
Земля те пухом
>>166106997Так, ёбана, я добился определенных успехов. При выборе файла размером 25МБ он нарезается на 8 кусков. var fileinput = document.getElementById("fileinput1"); var btn = document.getElementById("button1"); var txt = document.getElementById("txt1"); btn.onclick = function () { txt.innerText = ""; if (fileinput.files.length == 0) { txt.innerText = "Select one or more files."; } else { for (var i = 0; i < fileinput.files.length; i++) { var file = fileinput.files; var blob = file; var bytesPerChunk = 3757000; var size = blob.size; var start = 0; var end = bytesPerChunk; var completed = 0; var count = size % bytesPerChunk == 0 ? size / bytesPerChunk : Math.floor(size / bytesPerChunk) + 1; var counter = 0; for (var n = counter; n < count; n++) { counter = counter + 1; //CONSOLE console.log("COUNTER = " + counter); if (counter <= count) { var chunk = blob.slice(start, end); //CONSOLE console.log("CHUNK SIZE = " + chunk.size); start = end; end = start + bytesPerChunk; if (count == counter) { //CONSOLE console.log("CHUNKED COMPLETED"); } else { //CONSOLE console.log("NEXT CHUNKED"); } } } } } }
>>166106997>надо нарезать файл на мелкие кусочки, чтобы отправлять его на сервер.Но.. нахуя???
>>166108834Хочет большие вебм заливать сюда, очевидно же.
>>166108834Ограничение размера входящего запроса на сервер 4 МБ, с целью предотвращения атак, поэтому чтобы загружать большие файлы, их нарезают.
>>166108982Хм. Ладно, посмотрим что ты будешь делать дальше.
>>166108698Так, ну что думаете по дальнейшим действиям? Очевидно, что куски надо проименовать, чтобы было понятно, что собирать на сервере. Думаю привести их к объекту FormData и захуячить в массив.
>>166105721 (OP)>JS и C#ты пидар штоли?
>>166109244Короче, я запиздрючил отдельную функцию по генерации уникальных АйДи, буду её вызывать.function GetFileId(file) { function guidGenerator() { var S4 = function () { return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); }; return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4()); } var uploadFileName = file.name; function getFileExtension3(uploadFileName) { return uploadFileName.slice((uploadFileName.lastIndexOf(".") - 1 >>> 0) + 2); } var ext; ext = getFileExtension3(uploadFileName); var fileName = guidGenerator() + "." + ext; return fileName; }
>>166109624А где ты на /b/ не пидоров видел? Что не так?
>>166109703Спросил на всякий случай, вдруг не пидар залетный.
>>166105721 (OP)Без аякса это задача уровня 90-х годов. Просты потсом гонять файлы, да и вообще формы это как-бы устврело уже.
Завтра ищешь в интернете книжку HTML5 Canvas. Похуй если ничего не поймешь. Затем идешь на w3.org и изучаешь стандарты от корки до корки. Потом зубришь, именно, сука, вызубриваешь содержимое сайта developer.mozilla.org, чтобы от зубов отскакивало. Когда напишешь свой первый сайт - видеоредактор, по пути детально разобравшись в WebGL, скачиваешь и изучаешь любой редактор, рекомендую Notepad++ или Adobe Dreamweaver. Как переделаешь редактор, чтобы можно было добавлять объекты из 3DSMax и красивые 3D-переходы, можешь идти дальше - тебя ждет увлекательный мир JavaScript. WebCL, XUL, сверхбыстрый асинхронный Node.JS, сверхмощная мозговыебывательная многоуровневая обфускация. Отсос хиккующих выблядков / просто неудачников типа рейфага или Flash/Silverlight-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
>>166109920вот и jsбляди на огонек слетаться начали
>>166109920Здорово! Но я пока присвоил идентификаторы кускам и добавил кусок и ID в формдату.
>>166110338В принципе эти объекты можно отправлять на сервер и там ловить.
А я вот с собеседования пришел сейчас. Сказали, что верстальщик пиздатый, осталось узнать и CMS и как делать сайт полноценным.
>>166108698>При выборе файла размером 25МБ он нарезается на 8 кусковПоздравляю, ты только что пакеты.
>>166110338Маленько переделал. Добавил оригинальное имя файла на всякий случай.
>>166110762Так, ну-ка подсказывай, как их отправлять на сервак с помощью XMLHTTPRequest?
>>166105721 (OP)> Вкатываться в программирование когда тебе 13+ лет
>>166111075Еще наверно надо добавить в формдату cuhk size?
ну и где же C#?хочу поскорее обоссать тебя
Я короче обожаю чо нить на ассемблере делать, получаю от этого процесса удовольствие, люблю сидеть в дебагере и делать отладку, вот в процессе пишу сервер через epoll, пока он умеет обрабатывать некоторые команды на STDIN, устанавливать соединения с юзерами, при его выключении отрубает все дескрипторы, никаких там утечек памяти, пока что весит 2 килобайта, сначала это будет чатик,а если получится с графикой замутить чо нить без внешних либ, то мб какую нить простую игрульку по угару так, ну или типичный рогалик, только сетевой
>>166111281А что может накодить 13летний? Свой конфиг для сервера кубача?
>>166111496Так серверу и не нужна графика.И ты целом ты охуенен - сервер на асме - это мощно.Автотесты используешь?
>>166105721 (OP)
>>166111312>ну и где же C#?Ща скоро дойдем. Надо только пакет отправить на сервак, а там C# его будет ловить.
>>166111567Ага. Только у 13 летнего в 23 - когда из ВУЗа выходят, будет 10 лет какого-никакого опыта.И именно с такими людьми надо будет конкурировать на рынке труда.
>>166105721 (OP)Быдлокодеры в студию
>>166111607Да я чисто для себя пока делаю, мне заниматься просто нечем дома. Не, я его вручную сам тестирую, и в дебагере и так запускаю
Реши такую задачку из базового JSДан массив из 5 элементов (пусть будет 1 2 3 4 5) и нужно вернуть этот же массив но с переставленными первым и последним элементом.
PHP-господин вкотился. Сразу хочу поинтересоваться, что будешь делать, если один чанк проебется?
>>166112117Должен быть js фрэймворк для того.
>>166112217
>>166112200Думаю отправлять чанки по одному и дожидаться ответа от сервера, если чанк проебался, отправлять его снова.
>>166112117Там есть метод какой-то, что-то с шифтом связано.
хорошая попытка, таищ гугол
>>166112612Асинхронность не забудь, иначе js нахуй не нужон.
Ты же понимаешь, что подобная залупа на практике нигде не используется?
>>166111686>будет 10 лет какого-никакого опытаТак и вижу дауна, расписывающего 10 лет своих приключений уровня задачек егэ в резюме. Мне бы твой манямир.
>>166112844Ну если сразу отправить все пакеты на сервер, там будет куча-мала?
>>166113139Ну так пускай чанки нумерует Опкодами.
Выкатил своё говно. Пользуйся. private void SendFile(string path) { //Буфер сокета byte[] bytes = new byte[1024]; int BufferSize = 1024; //Адрес и порт string ip = "ip"; int port = 8080; byte[] SendingBuffer = null; NetworkStream netstream = null; TcpClient client = new TcpClient(ip, port); netstream = client.GetStream(); FileStream Fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); int NoOfPackets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(Fs.Length) / Convert.ToDouble(BufferSize))); int TotalLength = (int)Fs.Length, CurrentPacketLength; for (int i = 0; i < NoOfPackets; i++) { if (TotalLength > BufferSize) { CurrentPacketLength = BufferSize; TotalLength = TotalLength - CurrentPacketLength; } else CurrentPacketLength = TotalLength; SendingBuffer = new byte[CurrentPacketLength]; Fs.Read(SendingBuffer, 0, CurrentPacketLength); netstream.Write(SendingBuffer, 0, (int)SendingBuffer.Length); } Fs.Close(); netstream.Close(); client.Close(); }
>>166113273> byte[] bytes = new byte[1024];> int BufferSize = 1024;Класс.
>>166113273Хаха прекольная фотка собачки с сигареткой! А что ты написал я не понял! Я не погромист!
>>166113139Какая разница, как ты их будешь отправлять, всё равно не одним запросе. А если не одним, то хоть синхронно, хоть аснхронно, на сервере надо будет проверять готовность и склеивать когда всё получено.
>>166113979А вдруг по пути потеряется пакет? Надо быть уверенным, что всё дошло, потом клеить. Кстати отправили на сервер пакеты, как я и предполагал, они ушли кучей. Отлов на сервере на втором пике. Что скажете?
>>166114453>А вдруг по пути потеряется пакет?так ты же проверяешь отправку пакета на клиенте
>>166114619Надо еще дождаться, когда на сервере файл запишется на диск и разблокируется потоком.
>>166114682На сервере целостность проверяешь размером записанного файла с сообщенным размером, можешь хэш еще считать, если дохуя параноик, по итогу отвечаешь ок или не ок. Это самая неинтересная часть, пили склеивание.
>>166114834Как проверить, что файл записан и можно склеивать?
>>166115033Может тебе стоит перед отправкой файла передать контрольную сумму, а когда ты его склеишь сверить просто?
>>166114834Так ёпта, на сервере файлы сохранились, теперь их надо клеить в один.
>>166115563Проблема в том, что если файл не записан до конца и занять потоком, выскочит эксцепшен. Надо дождаться, когда файлы запишутся до конца и только потом клеить их.
>>166115033твой б-гмерзкий сишарп не возвращает чтоли успешное/неуспешное окончание записи данных в файл?
Зачем люди делают такие велосипеды? Ладно бы там что-то увлекательное, интересную тулзу либо игру. Нет нужно какой-то отправлятор файлов нафигачить. Это какая-то форма байтоебства, нездоровое дерьмо в общем
>>166115568Можно ебануть еще один запрос из js после успешной заказчки всех файлов. При получении запроса с общим ид тупо берешь и склеиваешь все по очереди. Я бы на твоем месте делал папку с гуидом и в нее валил файлы 1,2,3 и т.д., вместо того, чтобы потом ебаться с гуидом в имени файла.
>>166116050нахуй гуляй пидаров всяких спросить забыли
>>166116157>пидаров всякихНо я не сишарпист
>>166116239так и я не сишарпист
>>166116112Да с гуидом никаких проблем. Меня другое беспокоит. Как сделать так, чтобы цикл приостанавливался до возврата ответа от сервера?
>>166116969нахуя? ебошь одним циклом. отрезал чанк и вызвал функцию отправки. будет асинхронно всё. в колбеках отправки помечай чанк отпарвленным и проверяй, все ли отправились. если все, то шли команду на сервер для сборки.
>>166105721 (OP)Но у этого нет практическое применения, зачем это делать?
>>166113308> byte[] bytes = new byte[1024];Нам этот массив и "нахуй не нужон" Он нам от бабушки остался.
>>166117314Видео на сервер загружать.
>>166117314У мамаши твоей нет практическое применения.
>>166117161В контроллере каша-малаша.>в колбеках отправки помечай чанк отпарвленным и проверяйЭто как?
>>166117382Но зачем? Nginx из коробки сделает это лучше без костылей. А твоё решение приляжет уже на двух параллельных юзерах, грузящих файлы.
>>166117485Ну массивчик запили или тип того. Создал чанк, занес в массивчик, в колбеке пометил как успешно отправленный. Можно еще на сервере после каждого успешного сохранения проверку получения всех файлов делать, чтобы не заебываться с доп запросом с клиента. Хуяришь файл в темп, после успеха переносишь в папку с гуидом, проверяешь все ли файлы там есть, если все, то собираешь.
>>166117538nginx тоже самое делать будет, схуяли то он не приляжет на 2 || юзерах?