Я использую элемент управления Kendo Upload в приложении Angular, и он работает на 99%, но кажется, что он добавляет небольшой фрагмент текста в начало загружаемого текстового файла.
Вот определение HTML:
<kendo-upload [saveUrl]="SaveUrl"
(upload)="UploadHandle($event)"
(error)="UploadError($event)"
[restrictions]="Restrictions"
(success)="UploadSuccess($event)"></kendo-upload>
Обработчик загрузки:
UploadHandle(e: UploadEvent): void {
e.data = {
type: 'MasterFile'
};
}
Ограничения и ссылка на сохраненный URL:
SaveUrl = `${environment.baseUrl}/project/master/file`;
Restrictions: FileRestrictions = {
allowedExtensions: ['.txt']
};
И код на стороне сервера, получающий его:
public async Task<ActionResult<string>> CreateMaster()
{
if (!Request.HasFormContentType)
{
return BadRequest("No form data received");
}
if (Request.Form.Count != 1)
{
_logger.LogWarning($"Received {Request.Form.Count} forms: {JsonConvert.SerializeObject(Request.Form)}");
return BadRequest(
$"Must pass one and only one form, received {Request.Form.Count}");
}
if (Request.Form.Files.Count != 1)
{
_logger.LogWarning($"Received {Request.Form.Files.Count} Files");
return BadRequest($"Only one file is currently supported, received {Request.Form.Files.Count}");
}
var customerId = this.GetCurrentCustomerId();
var userId = this.GetCurrentUserId();
var sessionId = this.GetCurrentSessionId();
var file = Request.Form.Files[0];
var name = Path.GetFileNameWithoutExtension(file.FileName);
_logger.LogInformation($"Received file with name '{name}': {file.FileName}");
string textData;
using (var sr = new StreamReader(file.OpenReadStream(), Encoding.Unicode))
{
textData = await sr.ReadToEndAsync().ConfigureAwait(false);
}
_logger.LogInformation($"Text data is {textData.Length} characters");
_logger.LogInformation($"Text Data: {textData}");
AwsProject project;
try
{
project = await _service.CreateMasterAsync(
customerId,
name,
new List<string>(),
new List<CollaborateData>(),
textData,
userId,
sessionId).ConfigureAwait(false);
}
catch (InvalidDataException ex)
{
_logger.LogError($"Invalid Data Exception creating master: {ex}");
return BadRequest(
$"Keynote data is not valid, please open this file in Keynote Manager and remove any errors before uploading as a master. {ex.Message}");
}
return CreatedAtAction(nameof(GetProjectById), new { projectId = project.ID }, project);
}
Как вы можете видеть, я приложил много усилий для входа в систему на стороне сервера, чтобы попытаться выяснить, почему он не анализируется должным образом.Сначала я получал странные результаты, потому что я не устанавливал кодировку специально;Я исправил это, и это почти правильно.Единственное, что он не получает права, это то, что он добавляет несколько странных символов в начало строки.В загружаемом текстовом файле (локальный файл с использованием кодировки Unicode) первая строка выглядит следующим образом:
A1 Некоторые примечания, которые действительно информативны и полезны
Вжурнал на сервере выглядит следующим образом:
뿯 붿 A1 Некоторые примечания, которые действительно информативны и полезны
Все остальное идентично.Я также попытался добавить аргумент 'true' в конструктор потокового ридера, чтобы он распознал спецификацию (не знал, так ли это), но это не имело никакого значения.
Полагаю, яможет просто обрезать это с самого начала, и это, вероятно, сработает, но это кажется слишком хакерским ... Кто-нибудь знает, откуда это исходит и как заставить его этого не делать?