Kendo Angular Upload добавляет в начало текстового файла? - PullRequest
0 голосов
/ 25 июня 2019

Я использую элемент управления 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' в конструктор потокового ридера, чтобы он распознал спецификацию (не знал, так ли это), но это не имело никакого значения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...