Page 1 sur 2

[RESOLU] Envoi d'une image du PI vers mon site chez FREE

Posté : mer. 14 déc. 2016 17:08
par estelle
Salut,
J'essaie depuis plusieurs jours d'envoyer une image du Pi ver mon site
J'utilise Requests
Coté PI

Code : Tout sélectionner

fic="/home/pi/partage/pi1.png"
files = {'file': open(fic, "rb")}    
       
r = requests.post("http://ruches.free.fr/Affiche.php", files = files)
print (r.text)
print (r.status_code)
Coté Free (php)

Code : Tout sélectionner

<?php
$nom_fichier = $_POST['/home/pi/partage/pi2.png'];
echo "fichier: $nom_fichier";
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['pi2.png']) AND $_FILES['pi2.png']['error'] == 0)
{
        // Testons si le fichier n'est pas trop gros
        if ($_FILES['pi1.png']['size'] <= 2000000)
        {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES["pi2.png"]["name"]);
                echo $infosfichier;
                $extension_upload = $infosfichier['extension'];
                echo $extension_upload;
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        // On peut valider le fichier et le stocker définitivement
                        move_uploaded_file($_FILES["pi2.png"]["tmp_name"], 'images/' . basename($_FILES["pi2.png"]["name"]));
                        echo "L'envoi a bien été effectué !";
                }
                else {echo "Extension non autorisée";}
        }
        else {
         $temp = $_FILES['pi2.png']['size'];
          echo "taille: $temp ";}
}
else {
  $temp=$_FILES['pi2.png']['error'];
  echo "erreur: $temp ";}
?>
En réponse, j'ai le status à 200 et fichier: rien erreur; rien
Donc au 1er test "if (isset($_FILES['pi2.png']) AND $_FILES['pi2.png']['error'] == 0)" on part sur le "else"

Qui peut m'aider ?
Merci d'avance
Estelle

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : mer. 14 déc. 2016 18:43
par Alexidreaming
Salut, je ne comprends pas ce que tu veux, en gros tu veyx qu'on puisse télécharger l'image disque sur ton site? Ou qu'on puisse l'émuler?
Réexplique STP

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : jeu. 15 déc. 2016 06:57
par estelle
Salut,

J'ai une photo prise par une camera de mon pi que je veux envoyer automatiquement vers un répertoire de mon site hébergé chez FREE
J'utilise déjà avec succes Requests pour l'envoi de variables
J'ai lu que l'on pouvait faire exactement la même chose avec les fichiers
Maintenant s'il y a une autre solution je suis preneuse
Merci
A+

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : ven. 16 déc. 2016 14:51
par Alexidreaming
Salut, l'image, tu veux quelle s'affiche sur le site, ou quelle soit juste stocké et que tu puisse la récupérer plus tard?

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : ven. 16 déc. 2016 19:40
par domi
Si c'est juste envoyer une image pourquoi ne pas le faire en FTP ?

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : sam. 17 déc. 2016 11:58
par Bud Spencer
le coté php
upload_php.png
upload_php.png (13.64 Kio) Vu 6311 fois
et le coté python
upload_python.png
upload_python.png (4.6 Kio) Vu 6347 fois
...

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : mer. 21 déc. 2016 09:10
par estelle
J'ai suivi tes conseils mais j'ai les messages
-Erreur Extension
-echec upload

status = 200

Code : Tout sélectionner

<?php
$dir = 'images/';
$file = basename($files['images']['name']);
$file_temp = $files['images']['name'];
$size = filesize($file_temp);
$file_ext = strrchr($file,'.');

$exts = array('.gif','.png','.jpg');
$size_max = 200000;
if(!in_array($file_ext, $exts)) {echo 'Erreur Extension';}
if($size>$size_max) {echo 'erreur taille maxi';}

if(!isset($error))
{
  if(move_uploaded_file($file_temp, $dir . $file)) {
    echo 'upload ok';}
  else {echo 'echec upload';}
}    
?>

Code : Tout sélectionner

files = {'image': open('/home/pi/Documents/Camera/pi1.png', "rb")}     
                                                                             
      r = requests.post("http://ruches.montminoises.free.fr/Transfert_image.php", files = files)
     
      print (r.text)
      print (r.status_code)

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : mer. 21 déc. 2016 09:48
par Bud Spencer
Le code que j'ai mis fonctionne à coup sur sous réserve de restriction de config et de version php >= 5(de mémoire) et il suffit juste de le lire correctement pour le comprendre.

La variable postée se nomme 'image' dans ton script python (files = {'image': open('/home/pi.....)
et dans ton script php tu as mis 'images' pour initialiser tes variables ($file = basename($files['images']['name']); et $file_temp = $files['images']['name'];)

donc soit tu met un 's' a 'image' dans ton script python ou alors tu le supprimes sur les lignes d'initialisations de $file et $file_tmp dans ton scrip php

la variable $dir qui contiend 'images/' dans le php n'a rien à voir avec tout ca, elle défini le répertoire de destination, ce qui sous entend que ce répertoire doit exister sous la racine de l'emplacement de ton script php

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : mer. 21 déc. 2016 20:57
par estelle
oui tu as raison, il y a une petite erreur lors de la transcription
Après modification, j'ai toujours les mêmes erreurs !
Je vais essayer avec OVH car j'ai un doute avec FREE..
Peut être il bloque l'envoi de fichier....

Re: Envoi d'une image du PI vers mon site chez FREE

Posté : mer. 21 déc. 2016 21:50
par Bud Spencer
Je viens de tester avec le client python sur un pi et le php sur un site hébergé chez online, et ca fonctionne parfaitement (je n'ais pas de compte free pour essayer chez eux).
Par contre tu peux supprimer la condition 'if(!isset($error))' dans le code php. Je l'avais mise dans mon code de départ pour stocker les erreurs éventuelles dans une variable avant de simplification du code et j'ai oublié de l'enlever (ce qui n'empêche pas de fonctionner). j'ai fais la motif dans l'image du code.

J'ai regardé ton code et il y avait d'autres erreurs, notamment sur les lignes suivantes :

$file = basename($files['images']['name']); à remplacer par : $file = basename($_FILES['image']['name']);
$file_temp = $files['images']['name']; à remplacer par : $file_temp = $_FILES['image']['tmp_name'];

Pour comprendre, une seule solution -> RTFM -> http://php.net/manual/fr/reserved.variables.files.php

Pour t'éviter les mauvaises recopies, voila ton code tout corrigé que tu as juste à copier coller.

Code : Tout sélectionner

<?php

$dir = 'images/';   
$file = basename($_FILES['image']['name']);
$file_temp = $_FILES['image']['tmp_name'];  
$size = filesize($file_temp);
$file_ext = strrchr($file,'.');

$exts = array('.gif','.png','.jpg');
$size_max = 200000;

if(!in_array($file_ext, $exts)) {echo 'Erreur Extension';}
if($size>$size_max) {echo 'erreur taille maxi';}

if(move_uploaded_file($file_temp, $dir . $file)) 
{echo 'upload ok';}else {echo 'echec upload';}

?>
ps : ne mets pas publiquement l'adresse de ta page d'upload. Il n'y a aucune sécurité et n'importe qui pourrait uploader n'importe quel photos sur ton site ... du moins quand ca fonctionnera ... note aussi que la variable $size_max est fixée a 200.000 dans le code et non pas a 2.000.000, donc pense a réadapter si tu veux envoyer des images jusqu'à 2Mo