Вызовите конечную точку PostFiles с FormData из приложения Node.js вместо веб-сайта - PullRequest
0 голосов
/ 23 мая 2018

У меня есть конечная точка, на которую файлы отправляются с веб-сайта - через поле <input>.Код Angular выглядит следующим образом ...

@Injectable()
export class FileUploadService {

  constructor(private http: HttpClient) { }

  uploadFiles(files: any): Promise<void> {
   return new Promise<void>(async (resolve, reject) => {
       var formData = new FormData();
       for (let file of files)
           formData.append(file.name, file);

      const uploadReq = new HttpRequest('POST', `localhost:4200/api/postfiles`, formData, {
        reportProgress: true,
      });

    this.http.request(uploadReq).subscribe(event => {
      if (event.type === HttpEventType.UploadProgress)
      {
        console.log(`Progress: ${Math.round(100 * event.loaded / event.total)}`);
      }
      else if (event.type === HttpEventType.Response)
        console.log(`Done`);
        resolve();
  });
});
}
}

... и конечный элемент C # выглядит следующим образом ...

 [AllowAnonymous]
    [HttpPost("[action]")]
    [RequestSizeLimit(2147483640)]
    public async Task<IActionResult> PostFiles()
    {
        try
        {
            IFormFileCollection files = Request.Form.Files;
            if (files == null || files.Count == 0)
            {
                return BadRequest("No files received");
            }

            var blobs = new List<FileBlob>();
            foreach (var formFile in files)
            {
                //formFile.
                if (formFile.Length > 0)
                {
                    var stream = new MemoryStream();
                    await formFile.CopyToAsync(stream);
                    blobs.Add(new FileBlob(formFile.FileName, stream));
                }
            }

            if (await _blobStorage.SaveFilesAsync(blobs, "relativeTestPath"))
            {
                return Ok();
            }
            return BadRequest("Files could not be stored");
        }
        catch (Exception exp)
        {
            Debug.WriteLine("Exception generated when uploading file - " + exp.Message);
            string message = $"file / upload failed!";
            return BadRequest(message);
        }
    }

Теперь я хочу вызвать ту же конечную точку из узлаПриложение .js, которое читает файлы с помощью метода

 fs.readFileSync() 

, но я не знаю, как подготовить содержимое файла и отправить его в ту же конечную точку PostFiles.

Есть идеи?

1 Ответ

0 голосов
/ 24 мая 2018

Таким образом, решение (вкратце) состояло в том, чтобы создать для этого конечную точку и забыть о FormData:

filecontent = fs.readFileSync(filepath, {encoding: 'base64'));

POST файловое содержимое в теле (просто забудьте о FormData).В бэкэнде:

public async Task<IActionResult> PostFiles([FromBody] string fileContent) 
{
  var bytes = Convert.FromBase64String(fileContent);
  var stream = new MemoryStream(bytes);
  //save it anywhere
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...