[英]How do I encode (base64) a PDF file's blob using javascript and decode in PHP to save in SQL?
几天来我一直在尝试使用 AJAX 和 PHP 构建文件上传器。我能够毫无问题地上传图像。 但是每当涉及到 PDF 时,我都会得到空白页。
这是我尝试使用 FileReader 的结果:
for(const [key, file] of Object.entries($('input').prop('files'))){
const reader = new FileReader()
reader.onload = function(event){
var object = {
name:file.name,
size:file.size,
type:file.type,
content:reader.result,
}
API.post("file/upload/?csrf="+CSRF,object,{
success:function(result,status,xhr){
console.log(result)
}
})
}
reader.readAsDataURL(file)
}
在 PHP 中:
// $_POST['content'] = base64_decode(str_replace('data:' . $_POST['type'] . ';base64,', '', $_POST['content']));
// $_POST['content'] = base64_decode($_POST['content']);
$_POST['content'] = base64_decode(urldecode($_POST['content']));
我得到的结果:
Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
验证一次保存在 SQL 使用 phpMyAdmin 5.
预期结果应该是任何文件类型都应该被正确保存。
注意:API class 只是一个小的 class,其中包含 $.post 的参数,因此我不必一直键入它们。
第一个问题是我将二进制数据存储在 SQL 中,这不适合此类用途。 这导致 SQL 数据库损坏二进制数据。
因此,我使用本地存储的二进制文件 (.bin) 和 SQL 重新设计我的文件存储,以提供文件的所有元数据,包括路径和更高级的 ACL。
为了保护数据,我使用重写规则RewriteRule ^data/.*$ - [F,L]
。 这可以防止用户直接访问二进制数据。 因此保护文件。
一旦做出更改,我就可以通过应用程序的 API 使用readAsDataURL
方法保存文件,以检索编码的二进制数据并将其发送到 PHP API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.