#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 });
}