Как предотвратить повреждение изображения при загрузке? - PullRequest
0 голосов
/ 09 июля 2019

Я работаю в системе, которая загружает файл (в основном изображения), и большое количество из них повреждено:

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

}
});
};

Файл, который обрабатывает загрузку с использованием мыла:

$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 голосов
/ 10 июля 2019

Мы не выяснили, в чем причина проблемы, но вместо того, чтобы выполнить пост-запрос ajax, проблема, похоже, исчезает при отправке формы оригинальным способом (кнопка отправки + действие = "??. Php"), затемсохранение документа локально на сервере (move_uploaded_files), а затем создание base64 из этого локального файла.

Если у кого-то есть идея, почему это вызвано, пожалуйста, не стесняйтесь отвечать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...