2017-04-10 1 views
0

Je télécharge une pièce jointe à l'aide d'une chaîne base64 de l'API Gmail. Lorsque j'ouvre le fichier téléchargé en utilisant Windows, je vois l'erreur 'We can't open this file'. J'ai vérifié les en-têtes de $data tableau et ils sont corrects, j'ai également vérifié la taille du fichier téléchargé et c'est aussi la bonne taille.Impossible d'ouvrir le fichier téléchargé à partir de la chaîne base64 API Gmail

-je télécharger le fichier en utilisant le ci-dessous:

$data = $json['data']; 

$data = strtr($data, array('-' => '+', '_' => '/')); 

$image = base64_decode($data); 

header('Content-Type: image/jpg; name="crop-1.jpg"'); 
header('Content-Disposition: attachment; filename="crop-1.jpg"'); 
header('Content-Transfer-Encoding: base64'); 
header('X-Attachment-Id: f_j1bj7er60'); 

readfile($image); 

// I have also tried 
echo $image; 

La chaîne $image est valide parce que si j'utilise le dessous de l'image affiche correctement:

echo "<div> 
     <img src=\"data:image/jpg;base64, $image\" /> 
     </div>"; 

Comment puis-je corriger le fichier télécharger?

Répondre

0

$ data variable est base64_encode ressource.

<?php 
$decoded = base64_decode($data); 
$file = 'download_file.jpg'; 
file_put_contents($file, $decoded); 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    readfile($file); 
    unlink($file); 
    exit; 
} 
?> 

Désolé, mon anglais mauvais

Les informations suivantes peuvent être utiles.

détecter le contenu de type MIME pour un fichier

http://php.net/manual/en/function.mime-content-type.php

ou autre fonction.

fichier classe informations http://us2.php.net/manual/en/fileinfo.constants.php

function _mime_content_type($filename) { 
    $result = new finfo(); 

    if (is_resource($result) === true) { 
     return $result->file($filename, FILEINFO_MIME_TYPE); 
    } 

    return false; 
} 

file_get_contents() fonction http://php.net/manual/en/function.file-get-contents.php

fonction base64_encode() http://php.net/manual/en/function.base64-encode.php

code exemple.

$imageData = base64_encode(file_get_contents($image)); 

// Format the image SRC: data:{mime};base64,{data}; 
$src = 'data: '.mime_content_type($image).';base64,'.$imageData; 

// Echo out a sample image 
echo '<img src="'.$src.'">'; 
+0

Je peux déjà afficher l'image, le problème est avec le téléchargement de l'image, après son téléchargé et j'ouvrir le fichier que je vois « Nous ne pouvons pas ouvrir ce fichier » – user3312792

+0

Sory, après la mise à jour. – Scaffold