如何防止上传时图像损坏?

时间:2019-07-09 08:45:27

标签: php soap

我正在一个上载文件(主要是图像)的系统上工作,并且其中许多文件已损坏:

Example screenshot of corrupted image

我们最初认为上传的图像的base64编码的33%的额外大小超出了服务器的上传限制,并且破坏了多余的大小,但是现在我们发现80kb jpeg(和大约2mb .png)已损坏。

我们尝试了以下操作: *限制上传文件的最大大小 *转换为png *将文件保存在服务器上,然后从本地目录上传。

将数据发送到处理上载的文件的文件:

file[key] = input.files[0];
fr[key] = new FileReader();
fr[key].readAsDataURL(file[key]);
fr[key].onload = function(){
   var dataURL = fr[key].result;
   var base64 = dataURL.replace(/^[^,]*,/, '');
   fileName[key] = file[key]['name'];
   fileType[key] = file[key]['type'];
   $.ajax({
      method: "POST",
      url: "__URL_TO_PHP_FILE.php",
      data: {
         user_id: '<?=$_SESSION['user_id']?>',
         file_name: fileName[key],
         file_type: fileType[key],
         content: base64,
         label: attachments[key][0]
      }
}).done(function( msg ) {

//DO SOMETHING

}
});
};

使用soap处理上传的文件:

$user_id = $_POST['user_id'];
$content = $_POST['content'];
$name = $_POST['file_name'];
$type = $_POST['file_type'];
$label = $_POST['label'];

$xml = '<tag id="'.$user_id.'">
        <attachments>
            <content>'.$content.'</content>
            <filePath>'.$name.'</filePath>
            <valid>1</valid>
            <label>'.$label.'</label>
            <toTypeNode>
        </attachments>
    </tag>';

$posturl=__URL__;
$response=ConnectToApi($posturl,$xml,"put");

可能是我做错了某些事情,或者是我没有完全理解而导致此问题。

我想防止损坏,而不是使用在线的第三方工具修复图像。

1 个答案:

答案 0 :(得分:0)

我们还没有弄清楚导致问题的原因,但是以原始方式提交表单(提交按钮+ action =“ ??。php”)之后,问题似乎消失了,而不是进行了ajax发布请求。在服务器上将文档保存在本地(move_uploaded_files),然后从该本地文件创建base64。

如果有人对造成这种情况的原因有所了解,请随时回复。