如何从Blob网址(URL.createObjectURL())创建pdf文件对象

时间:2019-01-22 09:32:30

标签: javascript reactjs file pdf

我已经使用URL:URL.createObjectURL(file [0])创建了PDF文件的对象url。

例如url = blob:http://0.0.0.0:5002/e468fb70-d597-4b17-bb3a-ec6272f2d7fe

现在我要做的是 从url = blob:http://0.0.0.0:5002/e468fb70-d597-4b17-bb3a-ec6272f2d7fe读取pdf并创建文件对象,如

File(61) 
{
   name: "ICT_zbbihfc_dummy.pdf", 
   lastModified: 1548148972779, 
   lastModifiedDate: Tue Jan 22 2019 17:22:52 GMT+0800 (Singapore Standard Time), 
   webkitRelativePath: "", 
   size: 61,
   type: "application/pdf",
   webkitRelativePath: ""
}

这是Java语言。

2 个答案:

答案 0 :(得分:2)

要将 PDF或图像的Blob对象网址转换为文件对象

var file_object = fetch('blob:http://0.0.0.0:5002/e468fb70-d597-4b17-bb3a-ec6272f2d7fe') 
          .then(r => r.blob())
          .then(blob => {
              var file_name = Math.random().toString(36).substring(6) + '_name.pdf'; //e.g ueq6ge1j_name.pdf
              var file_object = new File([blob], file_name, {type: 'application/pdf'});
              console.log(file_object); //Output
           });
//------- 

要将 Base64的Image转换为File对象

var file_object = fetch('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA') 
          .then(r => r.blob())
          .then(blob => {
              var file_name = Math.random().toString(36).substring(6) + '_name.jpeg'; //e.g ueq6ge1j_name.jpeg
              var file_object = new File([blob], file_name, {type: 'application/jpeg'});
              console.log(file_object); //Output
           });
//------- 

答案 1 :(得分:1)

您在评论中澄清了:

  

我正在从输入标签中选择文件。之后,我要创建它的Blob网址。现在在“提交”按钮上,我想从blob url中读取文件作为文件对象。然后将文件对象发送到服务器。

您不需要File对象来执行此操作。您可以简单地发送Blob,例如使用FormDataappend方法,该方法接受Blob

但是:如果您拥有input,并且已经从File的{​​{1}}数组中获得了input,则最好直接使用它而不是阅读并创建一个files

可能值得指出的是,Blob元素有一个multiple attribute,可用于指定它可用于多个文件(这就是input type="file"属性是一个集合的原因) )。