通过开机自检发送上传的PDF文件已损坏


sending an uploaded PDF file via POST is becoming corrupt

我试图将使用JQ上传的pdf文件发送到PHP文件,该文件使用CLI和pdf2svg将其转换为svg文件,最终目的是返回该svg文件,以便可以将其放入svg编辑器中。

目前我有这个:在 svg-editor.js:

if(file.type.indexOf("pdf") != -1){
    //convert to svg
    //load svg string
    var reader = new FileReader();
    reader.onloadend = function(e) {
        $.post("pdfuploads/pdfconvert.php", { 'pdf[]': [e.target.result] })
            .done(function(data){
                alert("Data Loaded: " + data );
                svgCanvas.importSvgString(data, true);
                svgCanvas.ungroupSelectedElement()
                svgCanvas.ungroupSelectedElement()
                svgCanvas.groupSelectedElements()
                svgCanvas.alignSelectedElements("m", "page")
                svgCanvas.alignSelectedElements("c", "page")
            });
    };
reader.readAsText(file);
}

上面检查正在加载的文件的扩展名,如果是pdf,则将其发布到php文件。(一切正常)

在我的php文件中(它与drupal绑定):

<?php
$dir = getcwd();
define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']); //added to make sure its defined as we're outside the use of index.php
chdir(DRUPAL_ROOT);
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
chdir($dir);
global $base_url;
$time = microtime();
$handle = fopen("pdfupload-".$time.".pdf", "wb"); 
if (fwrite($handle, file_get_contents($_POST['pdf'][0])) === FALSE) { 
$error = "Cannot write to file";
exit; 
} 
fclose($handle);
//$file = file_put_contents('pdfupload-'.$time.'.pdf', $_POST['pdf'][0]);
$svg = exec("/usr/local/bin/pdf2svg pdfupload-".$time.".pdf output_page-".$time."%d.svg all");
cg_utils_watch('file pdf value','', $error);
cg_utils_watch('file svg value','', $svg);
echo "<pre>";
print_r($svg);
echo "</pre>";
return $svg;

忽略日志记录和$svg不返回 svg 文件的事实 --

pdf 流取自帖子并保存。不幸的是,在上传和保存在服务器上之间的一些软件,pdf文件已损坏。它保存了一个pdf文件,但是当打开该文件时它是空的,最终结果是写入exec()中的服务器的svg文件也是空的。

有没有人有任何想法/知道更好的方法?

好的,所以事实证明上面评论中的 mkl 是正确的,问题出在reader.readAsText(file)行上。

这是在发布

之前触发的,因此PDF文件被发布为文本。

在此之后: http://www.develop.com/htmlfivefileapi 我将 JQ 更改为以下内容:

if(file.type.indexOf("pdf") != -1){
    //convert to svg
    //load svg string
    var reader = new FileReader();
    reader.onloadend = function(e) {
        $.post("pdfuploads/pdfconvert.php", { 'pdf[]': [e.target.result] })
        .done(function(data){
            alert("Data Loaded: " + data );
            svgCanvas.importSvgString(data, true);
            svgCanvas.ungroupSelectedElement()
            svgCanvas.ungroupSelectedElement()
            svgCanvas.groupSelectedElements()
            svgCanvas.alignSelectedElements("m", "page")
            svgCanvas.alignSelectedElements("c", "page")
        });
    };
    reader.readAsDataURL(file);
}

它现在就像一个魅力:)