正在上传base64 pdf

时间:2019-01-17 10:42:00

标签: javascript php jquery ajax base64

我正在做一个文件管理器。现在,我在尝试上传pdf文件时遇到了问题。到目前为止,我可以上传图像的代码工作正常。 当我将pdf转换为base64字符串并将其在选项卡中打开时,它显示正确的文件并且正在工作。

当我上传文件时,它可以正确上传,但是当我打开上传的文件时,它似乎已损坏。

我上传文件的代码段:

JavaScript:

if(files[0].type.match(/\/pdf$/)){
 var reader = new FileReader();
 reader.readAsDataURL(files[0]);
 reader.onload = function () {
  uploadFile(reader.result, 'pdf', 'pdf', files[0].name);
  console.log(reader.result); //shows correct base64
 };
 reader.onerror = function (error) {
  console.log('Error: ', error);
 };
}


function uploadFile(file, name, type, file_name) {
  var file_name = file_name.split('.')[0];
  var $row = renderFileUploadRow(file_name, name);
  $('body').append($row);
  var fd = new FormData();
  fd.append('file_data', file);
  fd.append('do', 'upload');
  fd.append('type', type);
  fd.append('name', name)
  fd.append('file_name', file_name);
  var xhr = new XMLHttpRequest();
  xhr.open('POST', 'control.php?');
  xhr.onload = function(data) {
    $row.remove();
  };
  xhr.upload.onprogress = function(e) {
    if (e.lengthComputable) {
      $row.find('.progress').css('width', (e.loaded / e.total * 100 | 0) + '%');
    }
  };
  xhr.send(fd);
}

PHP收到ajax调用:

if ($_POST['do'] == 'upload') {
  $type = $_POST['type'];
    $img = $_POST['file_data'];
    $img = str_replace('data:image/'.$type.';base64,', '', $img);
  echo "$type";
    $img = str_replace(' ', '+', $img);
    $data = base64_decode($img);
  if ($type == 'jpeg') {
    $type = 'jpg';
  }
  define('UPLOAD_DIR', 'data/'.$_POST['name'].'/');
    $upload = UPLOAD_DIR . $_POST['file_name'] . '.'.$type;
  if (file_exists($upload)==1){
    $nummer = '1';
    while(file_exists(UPLOAD_DIR . $_POST['file_name'] .'('. $nummer . ').'.$type)) {
      $nummer++;
    }
    $upload = UPLOAD_DIR . $_POST['file_name'] .'('. $nummer .').'.$type;
  }
    $success = file_put_contents($upload, $data);
  exit;
}

我希望正确上传,因为当我首先制作图像并对其进行测试时,文件正确上传了。现在它已上传,但文件已损坏。

我在这里做什么错了?

0 个答案:

没有答案