Я работаю в системе, которая загружает файл (в основном изображения), и большое количество из них повреждено:
Изначально мы думали, что дополнительный размер кодировки 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");
Возможно, я что-то не так делаю или что-то, чего я не до конца понимаю, и вызывает эту проблему.
Я хочу предотвратить повреждение, а не исправлять изображения, используя сторонние инструменты, которые находятся в сети.