Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将PDF加载到blob中以便上载?_Javascript_Pdf_Blob_Plupload - Fatal编程技术网

Javascript 如何将PDF加载到blob中以便上载?

Javascript 如何将PDF加载到blob中以便上载?,javascript,pdf,blob,plupload,Javascript,Pdf,Blob,Plupload,我正在开发一个测试框架,该框架需要将文件传递给一个PLUpload实例的drop侦听器。我需要创建blob对象,以便在拖放事件中生成的数据传输对象中传递。我有它的文本文件和图像文件工作良好。我想添加对PDF的支持,但似乎在检索响应后无法立即获得编码。响应返回为文本,因为我使用Sahi检索它以避免跨域问题 简而言之:我收到的字符串是UTF-8编码的,因此内容看起来像是用文本编辑器打开的PDF。我想知道如何将其转换回创建blob所需的格式,以便在上传文档后一切看起来都正常 要将UTF-8字符串转换为

我正在开发一个测试框架,该框架需要将文件传递给一个PLUpload实例的drop侦听器。我需要创建blob对象,以便在拖放事件中生成的数据传输对象中传递。我有它的文本文件和图像文件工作良好。我想添加对PDF的支持,但似乎在检索响应后无法立即获得编码。响应返回为文本,因为我使用Sahi检索它以避免跨域问题

简而言之:我收到的字符串是UTF-8编码的,因此内容看起来像是用文本编辑器打开的PDF。我想知道如何将其转换回创建blob所需的格式,以便在上传文档后一切看起来都正常

要将UTF-8字符串转换为正确的blob对象,需要执行哪些步骤?(是的,我知道我可以提交一个XHR请求并更改responseType属性,(可能)离得更近,但是由于Sahi运作方式的复杂性,我不打算在这里解释为什么我不愿意走这条路线)

此外,我还不太熟悉,但我有一种预感,可能是因为将数据作为字符串检索而丢失了数据?如果是这样的话,我会找到另一种方法

现有代码和我尝试过的最新方法如下:

    var data = '%PDF-1.7%����115 0 obj<</Linearized 1/L ...'
    var arr = [];
    var utf8 = unescape(encodeURIComponent(data));
    for (var i = 0; i < utf8.length; i++) {
        arr.push(utf8.charCodeAt(i));
    }

    var file = new Blob(arr, {type: 'application/pdf'});

var数据='%PDF-1.7%����115 0 obj看起来你很接近。我只是为一个需要从另一个网站读取PDF并将其放入文件上传器插件的网站做了这项工作。以下是对我有效的方法:

    var url = "http://some-websites.com/Pdf/";

    //You may not need this part if you have the PDF data locally already
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            //console.log(this.response, typeof this.response);
            //now convert your Blob from the response into a File and give it a name
            var fileOfBlob = new File([this.response], 'your_file.pdf');

            // Now do something with the File
            // for filuploader (blueimp), just use the add method
            $('#fileupload').fileupload('add', {
                files: [ fileOfBlob ], 
                fileInput: $(this)
            });
        }
    }
    xhr.open('GET', url);
    xhr.responseType = 'blob';
    xhr.send();  

我在XHR上找到了关于blob的帮助。然后帮我命名文件。您可能可以单独使用
Blob
,但除非将其传递到
文件中,否则无法为其命名。。。;file=xhr.response;你尝试过新的Blob(数据,{type:'application/pdf'})吗?我试过了。我敢肯定我也尝试过@dandavis解决方案,但我会在几分钟后再试一次。请参阅第2和第3个示例,您在发布的代码中模仿了一种老式的二进制ajax方式,但自从IE8以来,这是不需要的。