我尝试将文件从输入元素转换为原始的二进制数据,然后在axios的帮助下将其上传到服务器。put
在我看来,代码的主要/有问题的部分是:
const file = document.getElementById('file').files[0]
async function getBinaryFromFile(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.addEventListener('load', () => resolve(reader.result))
reader.addEventListener('error', (err) => reject(err))
reader.readAsBinaryString(file)
})
}
const binary = await getBinaryFromFile(file)
const config = {
data: binary,
signal: controller.value.signal
}
axios.put(`${url}/${uuid}/file/${file.name}`, binary, config)
这是I console.log(二进制)的输出:
-----------------------------220913591021183570121419664829
内容处置:表格数据;名称=“数据”;文件名=“附加-1.pdf”
内容类型:应用程序/pdf
%PDF-1.5% PDF-4 0对象/长度5 0 R /过滤器/扁平解码
stream x��}[�f7r�����S�z���; ��r1�8�����a������#;�{2�?\kU��N�zz$��Nշ77Y����dx��a�'����w}�~���u��;�1����_=�������ӷ�x�e���[ZP�/)�������{��o�������#<������o�{���_������w칔���u?�r������7����W��?{��#�Q��|�_rK����1������%�q'�w��C��8^�(�cx���R�\�ܝ��;����s���/c��|ꉈ~�����k��1��p �|虈��@��Bj�*/�7{x�a��Dž��&��8���p"����b��(�nV�c��>�۰���Qo��� ��|�U���J�CԻ�勤��E���O֙:����ϳ� �Z��^���t�����������S�SQC�_ �����~��&9C����.+/#tc����*pr��S���M�=g�\�vH���= |�!�����K�q��&!��$��yL��OG��zW��[to�
Ik����p����mb0� ��H!+������ RB��[�`~�\�<1ar�dQ�'���D(�DLEB�^������~\��=��a�u,��� ��������'�J���>����Q>e����[�................
如果我从服务器下载文件后,我得到一个错误,它无法显示或一个空白的PDF。我在这里做错了什么?为什么我得到这个胡言乱语?
2条答案
按热度按时间nwnhqdif1#
记住,“二进制字符串”是一个包含值的字符串,这些值在字体中可能没有与之关联的字形。
也就是说,
readAsBinaryString
不是我在新代码中要做的事情(而且在任何情况下,都没有理由在config.data
属性中提供数据 * 作为参数 * 和 *)。File
对象是Blob
,axios可以将blob作为data
来处理:pkln4tw62#
解决方案是相当容易的,而不是使用
reader.readAsBinaryString(file)
,我使用reader.readAsArrayBuffer(file)
,它的工作就像一个魅力。