【发布时间】:2019-02-28 14:12:12
【问题描述】:
我是创建文件(php laravel)的新手,我在加载 pdf 时遇到问题(无法在浏览器中加载 PDF 文档)。当我在 Controller 中解码 base64 代码并用它制作 pdf 文件时,pdf 结果代码不熟悉。
我认为这就是问题所在。这是创建和加载 pdf 文件的代码。
public function fileload(Request $request) {
$name = time().'.' . explode('/', explode(':', substr($request->pdf, 0, strpos($request->pdf, ';')))[1])[1];
$data = base64_decode($request->pdf);
$file_create = file_put_contents('files/projects/'.$name,$data);
$file = public_path()."/files/projects/".$name;
return response()->download($file,$name);
}
设置base64中pdf的Vue.js(script)代码
data(){
return{
form: new Form({
file:'',
filetype:'',
pdf:'',
})
}
},
methods: {
onInputChange(e){
let file = e.target.files[0];
let reader = new FileReader();
if(file['size'] < 211177555){
reader.onloadend = (file) => {
//console.log('RESULT',reader.result)
this.form.file = e.target.files;
this.form.pdf = reader.result;
}
reader.readAsDataURL(file);
}else{
this.$toastr.e('Your file exceeds 2MB.');
}
},
Vuejs(模板)
<form @submit.prevent="addFile(form.file)">
<input type="file" id="file" @change="onInputChange">
<input type="submit" name="">
</form>
this.form.pdf 的输出是我检查的 base64。
data:application/pdf;base64,JVBERi0xLjMKJcfsj6IKMzAgMCBvYmoKPDwvTGVuZ3RoIDMxIDAgUi9GaWx0ZXIgL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnic7X3dkyW3be/7/BVT9yVOVfa4+U0mTzeJ45uUXXFspZKHvNgrS3K8K9mSJcf56y9+ALqbPY2ew9N7ZmVZm1SiBaabDYIAiC/y/P....
【问题讨论】:
-
什么是
$request->pdf,为什么你认为它是用base64编码的? -
您期望
$request->pdf包含/、:和;似乎真的很奇怪,但随后将其扔给不理解任何这些符号的base64_decode()作为输入。 -
我返回 $request->pdf,是的,它以 base64 编码。