Как использовать FormData со встроенным RestService ABP?

#c# #angular #typescript #form-data #abp

#c# #angular #typescript #форма-данные #abp

Вопрос:

Я хочу загрузить файл в свое приложение на основе ABP.

Моя служба приложений создается следующим образом:

 public async Task<IEnumerable<ScheduleDto>> UploadAsync(IFormFile File)
 

Который сгенерировал конечную точку REST API следующим образом:

введите описание изображения здесь

И это нормально.

Теперь, когда я создаю прокси, он создает прокси на стороне клиента, подобный этому, который не принимает файл в качестве входных данных, вместо этого он создал JSON для IFormFile :

 upload = (File: IFormFile) =>
  this.restService.request<any, ScheduleDto[]>({
    method: 'POST',
    url: `/api/app/schedule/upload`,
  },
  { apiName: this.apiName });
 

Поскольку этот метод оказался бесполезным, я решил использовать службу REST, предоставляемую ABP framework, поскольку она обрабатывает успехи и неудачи внутри. Я ввел RestService в компонент:

 constructor(private matchService: MatchService, private scheduleService: ScheduleService,private rest: RestService) {} //
 

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

 UploadSchedule(files) {
  const formData = new FormData();
  formData.append('file', files[0], files[0].name);

  this.rest.request<FormData, ScheduleDto[]>({
    method: 'POST',
    url: `/api/app/schedule`,
    body: formData,
  });
}
 

Я могу загрузить файл с помощью HTTP-сервиса Angular, поэтому с конечной точкой API все в порядке. Похоже, что сгенерированный ABP сервис поддерживает только данные JSON, а не FormData .

Ответ №1:

Вы можете загружать файлы с помощью встроенного RestService . Ваш код в порядке, единственная проблема в том, что вы не вернули наблюдаемое, и никто на него не подписывается. Кроме того, { apiName: this.apiName } кажется, отсутствует. Короче говоря, измените UploadSchedule метод на следующий и подпишитесь на него оттуда, откуда вы вызываете.

 UploadSchedule(files) {
  const formData = new FormData();
  formData.append('file', files[0], files[0].name);

  return this.rest.request<FormData, ScheduleDto[]>({
    method: 'POST',
    url: `/api/app/schedule`,
    body: formData,
  },
  { apiName: this.apiName });
}