#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
. Пожалуйста, уточните свои цели. Что вы пытаетесь сделать, как вы это делаете в настоящее время (в целом, не публикуя весь свой код) и где именно вы сталкиваетесь с проблемой.