【问题标题】:PDF file open but cannot load LaravelPDF 文件打开但无法加载 Laravel
【发布时间】: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-&gt;pdf,为什么你认为它是用base64编码的?
  • 您期望 $request-&gt;pdf 包含 /:; 似乎真的很奇怪,但随后将其扔给不理解任何这些符号的 base64_decode()作为输入。
  • 我返回 $request->pdf,是的,它以 base64 编码。

标签: php laravel pdf


【解决方案1】:

在我看来$request-&gt;pdf 不是base64,而是Data URI scheme,它可能在其组成中使用Base64,但不是Base64,base64_decode() 不会正确解析。

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

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

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

如果你把它扔给base64_decode() 来解析它会输出垃圾,这正是你所看到的。

【讨论】:

  • 感谢您的先生,它工作得很好!我只需要 FileSerializedInBase64。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多