ASP.NET Веб-API 4 неожиданное завершение составного потока mime

#asp.net #angular #asp.net-web-api #file-upload

#asp.net #угловой #asp.net-веб-api #файл-загрузить

Вопрос:

итак, у меня есть старый угловой проект 2-rc4, который работает asp.net веб-api 4, я пытаюсь реализовать загрузку файлов, и у меня возникла проблема с отправкой файла с внешнего интерфейса.

я получаю ошибку unexpected end of mime multipart stream

это происходит только в клиентском проекте, если я отправлю запрос от почтальона, файл будет успешно загружен, есть идеи, что может привести к этому?

То, что я пробовал до сих пор

Я читал, что нам, возможно, потребуется добавить список отзыва сертификатов в конец потока, чтобы реализовать это, что все еще не решило проблему

 reqStream.Position = 0;  MemoryStream tempStream = new MemoryStream();  reqStream.CopyTo(tempStream);    tempStream.Seek(0, SeekOrigin.End);  StreamWriter writer = new StreamWriter(tempStream);  writer.WriteLine();  writer.Flush();  tempStream.Position = 0;   StreamContent streamContent = new StreamContent(tempStream);  foreach (var header in Request.Content.Headers)  {  streamContent.Headers.Add(header.Key, header.Value);  }  

Вот исходный код, который отправляет запрос

 let body = JSON.stringify(jobFilesUpload);   const fileHeaders = new Headers();  fileHeaders.append('Accept', '*/*');  fileHeaders.append('Access-Control-Allow-Origin', '*');  fileHeaders.append('Content-Type', 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW');   this.authHttp.post(this.authService.apiUrl   "api/upload"   jobFilesUpload.OBPJobId, body, { headers: fileHeaders }).subscribe(do more stuff here)  

Ответ №1:

Изменил способ вызова конечной точки для использования XHR

  var fd = new FormData(); for (var i in this.FilesList) {  fd.append("fileToUpload", this.FilesList[i], this.FilesList[i].name);  this.FilesList[i].Comments = this.FileComments; }   let xhr = new XMLHttpRequest();  let url = this.authService.apiUrl   "api/SaveOBPJobFiles";   xhr.open("POST", url, true);  xhr.setRequestHeader("Authorization", "Bearer "   this.authService.userToken.JWT);  xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");   xhr.onreadystatechange = function () {  if (xhr.readyState === 4 amp;amp; xhr.status === 200) {  // Display success or failure to user  var response = JSON.parse(xhr.response);   if (response.success == true) {  self.Item.OBPJobFiles = response.obpJobFiles;  self.Item.FileCount = response.obpJobFiles.length;  self.ClearOBPFiles();  console.log("File Success");  console.log(response.productionFiles);  } else {  self.toastrService.Error(response.message);  }   self.OBPFileProcessing = false;  setTimeout(() =gt; {  self.systemService.StopLadda();  }, 1);  } else {   self.OBPFileProcessing = false;  setTimeout(() =gt; {  self.systemService.StopLadda();  }, 1);  }  }   xhr.send(fd);  

казалось, что это исправило первоначальную проблему для всех, кто еще боролся.