Manipulação de uploads de imagens de uma carga JSON

Isso é para um serviço da web PHP que recebe uma das duas cargas úteis POST:

  1. Um HTTP POST padrão (multipart / form-data)
  2. Um POST de dados JSON (aplicativo de tipo de conteúdo / json)

No segundo caso, as imagens são enviadas como strings codificadas em base64. O código a seguir remove os metadados do início do arquivo e cria um arquivo temporário para substituí-lo na matriz $ _FILES .

Nesse caso específico, todos os dados JSON estavam sendo enviados de um serviço da Web Python remoto, portanto, a verificação do agente do usuário foi adaptada de maneira adequada.

if(strstr($_SERVER['HTTP_USER_AGENT'], 'CPython')!==false) {
$data
= file_get_contents($_FILES['upfile']['tmp_name']);
// Strip the meta-data from the start of the file
// This is added when base64-encoding the data
$data
= substr($data, strpos($data, ','), strlen($data));
$data
= base64_decode($data);
$temp
= tempnam("/tmp", "img_");
file_put_contents
($temp, $data);
$_FILES
['upfile']['tmp_name'] = $temp;
}

Nós reatribuímos o valor de $ _FILES [‘upfile’] [‘tmp_name’] para tratamento futuro.

NB

Quando você move o arquivo, você precisa usar rename () no lugar de move_uploaded_file () já que não é mais um arquivo carregado .

if(!rename($temp, $new_filename)) {
unlink
($temp); // clean up
$app
->halt(500, 'Internal Server Error. ' . $temp . ' ' . $new_filename);
}