неожиданный конец многочастных данных - PullRequest
0 голосов
/ 31 октября 2018

У меня есть служба API .net core 2.0, которая получает два файла (XML и word) и передает их на сервер js узла, который сохраняет их в MongoDB.

когда я размещаю службу net core на моем локальном хосте, все работает нормально, но когда я загружаю службу .net в open shift (Kubernete), я получаю исключение из службы Node.js в busboy-body -parser пакет в файле index.js:

"Ошибка: неожиданный конец многоэлементных данных в ... node_modules \ dicer \ lib \ Dicer.js: 62: 28 at process._tickCallback (Внутренний / процесс / next_tick.js61: 11) "

этот код обнаружил исключение в файле index.js :

busboy.on('error', function (err) {
                debug('Error parsing form');
                debug(err);
                error = err;
                next(err);
            });

вот мой код c # для отправки файлов в службу Node.js, скопированный с bratched :

public byte[] UploadFiles(string address, IEnumerable<UploadFile> files, NameValueCollection values)
    {
        var request = WebRequest.Create(address);
        request.Method = "POST";
        var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
        request.ContentType = "multipart/form-data; boundary=" + boundary;
        boundary = "--" + boundary;

        using (var requestStream = request.GetRequestStream())
        {
            // Write the values
            foreach (string name in values.Keys)
            {
                var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
                requestStream.Write(buffer, 0, buffer.Length);
                buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine));
                requestStream.Write(buffer, 0, buffer.Length);
                buffer = Encoding.UTF8.GetBytes(values[name] + Environment.NewLine);
                requestStream.Write(buffer, 0, buffer.Length);
            }

            // Write the files
            foreach (var file in files)
            {
                var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
                requestStream.Write(buffer, 0, buffer.Length);
                buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine));
                requestStream.Write(buffer, 0, buffer.Length);
                buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", file.ContentType, Environment.NewLine));
                requestStream.Write(buffer, 0, buffer.Length);
                file.Stream.CopyTo(requestStream);
                buffer = Encoding.ASCII.GetBytes(Environment.NewLine);
                requestStream.Write(buffer, 0, buffer.Length);
            }

            var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--");
            requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length);
        }

        using (var response = request.GetResponse())
        using (var responseStream = response.GetResponseStream())
        using (var stream = new MemoryStream())
        {
            responseStream.CopyTo(stream);
            return stream.ToArray();
        }
    }

1 Ответ

0 голосов
/ 01 ноября 2018

Попробуйте посмотреть по этой ссылке: https://github.com/mscdex/dicer/issues/14

вам нужно добавить список ошибок в файл и посмотреть, в чем проблема

Мы можем отловить ошибку, прикрепив обработчик события ошибки к объекту файла.

file.on ('error', () => {})

...