Загрузка файла более 2гб через POST запрос....

StrannikK187

Client
Регистрация
06.06.2017
Сообщения
4
Благодарностей
0
Баллы
1
Добрый день. Вопрос следующий. Имеются 2 файла 1.9 и 2.3 гб .... Выгружаю их на сервер через POST запрос с простой формой:

------WebKitFormBoundaryi123333
Content-Disposition: form-data; name="sess_id"
{-Variable.SESS_ID-}
------WebKitFormBoundaryi123333
Content-Disposition: form-data; name="file"; filename=""
Content-Type: file/file
{-Variable.upload-}
При загрузки файл 1.9 гб все проходит отлично. Если гружу 2.3гб., то кубик даже не пытается что либо грузить... Думал что проблема в серверах куда я пытаюсь загрузить файлы. Там ограничения на размер загружаемого файла нету. Так же пробовал загружать файлы на другие сервера и столкнулся с точно такой же проблемой: то что меньше 2 гигов заливается на ура, то что выше - "затык". Есть подозрения что это затык зенки, но это не точно) Через C# все заливается без проблем. Но мне хотелось бы узнать почему я не могу это сделать кубиком POST?
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
534
Благодарностей
1 112
Баллы
93
  • Спасибо
Реакции: SlipDez

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 866
Баллы
113
Попробуйте переключиться на альтернативный метод http-запросов, вдруг поможет
 

StrannikK187

Client
Регистрация
06.06.2017
Сообщения
4
Благодарностей
0
Баллы
1
Попробуйте переключиться на альтернативный метод http-запросов, вдруг поможет
можно немного конкретики?) просто не совсем понял какой альтернативный метод вы имеете в виду?
 

StrannikK187

Client
Регистрация
06.06.2017
Сообщения
4
Благодарностей
0
Баллы
1
Напишите, пожалуйста, пример как вы отправляете через C#.
C#:
string strFileToUpload = project.Variables["upload"].Value;
string strUrl = project.Variables["servNum"].Value;
Uri oUri = new Uri(strUrl);
string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");

// The trailing boundary string
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");

// The post message header
string strPostHeader =
"--" + strBoundary + "\r\n" +
"Content-Disposition: form-data; name=\"sess_id\"\r\n\r\n" +
project.Variables["SESS_ID"].Value + "\r\n" +
"--" + strBoundary + "\r\n" +
"Content-Disposition: form-data; name=\"file\"; filename=\"" + Path.GetFileName(strFileToUpload) + "\"\r\n" +
"Content-Type: application/octet-stream\r\n\r\n";

byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);

try {
// The WebRequest
HttpWebRequest oWebrequest = (HttpWebRequest)WebRequest.Create(oUri);
oWebrequest.ContentType = "multipart/form-data; boundary=" + strBoundary;
oWebrequest.Method = "POST";
// Upload time, ms 
oWebrequest.Timeout = 600000;

// This is important, otherwise the whole file will be read to memory anyway
oWebrequest.AllowWriteStreamBuffering = false;

// Get a FileStream and set the final properties of the WebRequest
FileStream oFileStream = new FileStream(strFileToUpload, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + oFileStream.Length + boundaryBytes.Length;
oWebrequest.ContentLength = length;
Stream oRequestStream = oWebrequest.GetRequestStream();

// Write the post header
oRequestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

// Stream the file contents in small pieces 2048 bytes
byte[] buffer = new byte[2048];
int bytesRead = 0;
while ((bytesRead = oFileStream.Read(buffer, 0, buffer.Length)) != 0)
oRequestStream.Write(buffer, 0, bytesRead);
oFileStream.Close();

// Add the trailing boundary
oRequestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
WebResponse oWResponse = oWebrequest.GetResponse();
Stream s = oWResponse.GetResponseStream();
StreamReader sr = new StreamReader(s);
String sReturnString = sr.ReadToEnd();

// Clean up
oFileStream.Close();
oRequestStream.Close();
s.Close();
sr.Close();

return sReturnString;
} catch (Exception e) {
    project.Variables["error"].Value = e.Message;
}
Этот запрос, что называется, "я его слепила из того что было" =) Возможно тут что то не правильно, но он работает. Но я замерял скорости загрузки файлов до 2 гб простым пост запросом и тот же файл через сишарп.... скорость простого запроса выходила в разы быстрее....

ПыСы Хотел еще отметить что при отправке запроса с файлом до 2 гб в окне зенки "трафик" виден этот запрос, а как выбираю файл больше, то там пусто... кубик как бы выполнен, но никакого трафика никуда даже не пытается послать, потому у меня и появились подозрения что это какие ограничения зенки....
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)