Преобразование входных файлов в байт[] javascript

#javascript #file #input #base64

Вопрос:

Я работаю над веб-приложением REST, которое управляет документами между пользователями и загрузчиками. Серверная часть написана на Java, и моя сущность документа содержит, помимо различных атрибутов, a byte[] content . Я смог отправить файл, созданный на стороне сервера, с помощью

 @GET
...
document.setContent(Files.readAllBytes(Paths.get("WEB-INF/testFile.txt")));
return Response.ok(document).build();
 

и извлеките его на переднем конце (VueJS) через

 async function download(file) {
  const fileURL = window.URL.createObjectURL(new Blob([atob(file.content)]));
  const fileLink = document.createElement("a");

  fileLink.href = fileURL;
  fileLink.setAttribute("download",`${file.name}.${file.type}`);
  document.body.appendChild(fileLink);
  fileLink.click();
  fileLink.remove;
  window.URL.revokeObjectURL(fileURL);
}
 

проблема в том, что когда я пытаюсь загрузить файл, а затем загрузить его, его содержимое анализируется неправильно (отображается неопределенно, строка в Base64 или числа в зависимости от того, как я пытаюсь ее решить). Файл отправляется по запросу post и извлекается через форму ввода, привязанную к onFileSelected функции.

 function onFileSelected(e) {

  var reader = new FileReader();
  reader.readAsArrayBuffer(e.target.files[0]);
  reader.onloadend = (evt) => {
    if (evt.target.readyState === FileReader.DONE) {
      var arrayBuffer = evt.target.resu<
      this.file.content = new Uint8Array(arrayBuffer);
      //this.file.content = arrayBuffer;
    }
  };
  
}

axios.post(...,document,...)
 

и я пробовал использовать atob и btoa также, прежде чем присваивать значение this.file.content . Если я распечатаю файл на сервере Welcome.txt он дает B@ae3b74d , и если я использую Arrays.toString(welcome.getContent()) его, он дает массив чисел, но как только он передается на интерфейс, его содержимое становится в Base64 welcome: { ... content: IFRoaXMgaXMgYSB0ZXN0IGZpbGUhIAo...} . Есть идеи? Большое вам спасибо!

Комментарии:

1. atob('IFRoaXMgaXMgYSB0ZXN0IGZpbGUhIAo') === ' This is a test file! n'

2. Я действительно вижу правильно отформатированную Base64 строку. Содержимое отличается от указанного вами: B@ae3b74d . Пожалуйста, уточните свои цели. Что вы пытаетесь сделать, как вы это делаете в настоящее время (в целом, не публикуя весь свой код) и где именно вы сталкиваетесь с проблемой.