Я пытаюсь загрузить файл (PDF) с веб-сайта в базовую службу ASP.NET Core.
Первые 40 байт моего тестового файла: 37, 80, 68, 70,45, 49, 46, 52, 13, 37, 226, 227, 207, 211 , 13, 10, 53, 48, 32, 48, 32, 111, 98, 106, 13, 60,60, 47, 76, 105, 110, 101, 97, 114, 105, 122, 101, 100, 32, 49
Сначала я попытался загрузить файл с помощью простого тега формы:
<form action=".../document/add/" method="post" id="dp-add-document" enctype="multipart/form-data">
<!-- ... -->
<div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-12">
<input id="file-upload-file" type="file" name="File">
</div>
<!-- ... -->
<div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-12 dmc-form__actions">
<button id="submit" class="mdc-button mdc-ripple-upgraded" type="submit">Ok</button>
</div>
</form>
Для получения файла я использовал следующее (dto содержит некоторую дополнительную информацию, которую пользователь должен ввести
[HttpPost("add/", Name = nameof(DocumentController) + "." + nameof(AddDocument))]
async public Task<object> AddDocument([FromForm] AddDocumentDto data)
{
byte[] buff = new byte[40];
data.File.OpenReadStream().Read(buff, 0, 40);
var ids = String.Join(", ", buff.Select(x => x.ToString()).ToArray());
}
Строка ids содержит следующее: 37, 80, 68,70, 45, 49, 46, 52, 13, 37, 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189 , 13, 10, 53,48, 32, 48, 32, 111, 98, 106, 13, 60, 60, 47, 76, 105, 110, 101
Как видно, каждый байт выше 128 преобразуется в 239, 191,189.
После некоторого веселья с Google безрезультатно я попытался загрузить файл с помощью JavaScript:
$('#file-upload-file').on('change', function (event) {
_fileToUpload = event.target.files[0];
$.ajax({
url: '../upload/',
type: 'POST',
data: _fileToUpload,
processData: false,
contentType: 'application/octet-stream', /* charset=ISO-8859-1 */
success: function () {
alert('upload ok');
},
error: function () {
alert('upload error');
}
});
}
Для этого JavaScript-путь я написал новое действие внутри моего контроллера:
[HttpPost("upload", Name = nameof(DocumentController) + "." + nameof(UploadDocument))]
async public Task<object> UploadDocument()
{
var stream = Request.Body;
byte[] buff = new byte[40];
stream.Read(buff, 0, 40);
var ids = String.Join(", ", buff.Select(x => x.ToString()).ToArray());
}
Но это то же самое. Серверная часть получает неправильные значения, и файл PDF не является допустимым PDF-документом: 37, 80, 68, 70, 45, 49, 46, 52, 13, 37, 239, 191, 189, 239, 191. 189, 239, 191, 189, 239, 191, 189 , 13, 10, 53, 48, 32, 48, 32, 111, 98, 106, 13, 60, 60, 47, 76, 105,110, 101
Как видите, я пытался использовать кодировку при загрузке, но это не решило мою проблему. Я думаю, что это небольшая проблема с кодировкой, но я не могу это исправить. Кто-нибудь может мне помочь?