PDF文件已打开,但无法加载Laravel

时间:2019-02-28 04:05:39

标签: php laravel pdf

我是创建文件(php laravel)的新手,并且pdf加载有问题(无法在浏览器中加载PDF文档)。当我在Controller中解码base64代码并用它制作pdf文件时,pdf结果代码不熟悉。

Code sublime texte 3 pdf file decode base64

我认为这就是问题的根源。这是创建和加载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>

1 个答案:

答案 0 :(得分:1)

在我看来$request->pdf不是base64,而是Data URI scheme,它可以在其组成中使用Base64,但不是Base64,因此无法被base64_decode()正确解析。

带来的好处是,不仅您正在数据中寻找像:;这样的符号,而且显然是在寻找它们。 Base64不包含这些符号。

$request->pdf可能是data:application/pdf;base64,FileSerializedInBase64

这不是base64!只有最后一部分。

如果将其按原样扔给base64_decode()进行解析,则会输出垃圾,这正是您所看到的。