我是创建文件(php laravel)的新手,并且pdf加载有问题(无法在浏览器中加载PDF文档)。当我在Controller中解码base64代码并用它制作pdf文件时,pdf结果代码不熟悉。
我认为这就是问题的根源。这是创建和加载pdf文件的代码。
<form>
URL:
<input type="text" id="url" name="url" value=""><br>
<input type="button" onClick="formSubmit()" value="Search" />
<script>
function formSubmit() {
var urle = document.getElementById("url").value;
document.getElementById("iframe1").src =
urle;
}
</script>
<iframe id="iframe1" scrolling="yes" height="900" width ="900" src=""></iframe>
</form>
Vue.js(script)代码,其中在base64中设置了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);
}
Vuejs(模板)
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.');
}
},
this.form.pdf的输出是我检查过的base64。
<form @submit.prevent="addFile(form.file)">
<input type="file" id="file" @change="onInputChange">
<input type="submit" name="">
</form>
答案 0 :(得分:1)
在我看来$request->pdf
不是base64,而是Data URI scheme,它可以在其组成中使用Base64,但不是Base64,因此无法被base64_decode()
正确解析。
带来的好处是,不仅您正在数据中寻找像:
和;
这样的符号,而且显然是在寻找它们。 Base64不包含这些符号。
$request->pdf
可能是data:application/pdf;base64,FileSerializedInBase64
。
这不是base64!只有最后一部分。
如果将其按原样扔给base64_decode()
进行解析,则会输出垃圾,这正是您所看到的。