8
votes

Création d'une API pour mon script PHP - Téléchargement de fichier

ok ici c'est: (Je change le contenu de ce post pour la troisième fois pour mieux expliquer)

Mon site Web est un site Web Hébergement d'images , ce qui signifie que l'utilisateur peut télécharger sur mon site Web et recevoir un lien direct vers son image téléchargée.

J'ai besoin d'une sorte d'API / moyen de communiquer de mon site avec mes utilisateurs. Je souhaite que les utilisateurs qui sont enregistrés sur mon site Web puissent télécharger des images de leur site Web à mon hôte d'image sans qu'ils doivent quitter leur propre site Web (Ajax, iframe, Curl, JSON, peu importe ce qu'il faut).

La demande à mon site Web devrait inclure un paramètre & demande = API afin que l'utilisateur obtienne un texte brut de mon script upload.php. De cette façon, je pense que je m'assure un moyen plus facile de saisir des données / sorties de mon site.

Donc, fondamentalement, après une requête post / fichiers du site de l'utilisateur à mon hôte de l'image , ils reçoivent un lien de mon script de traitement de téléchargement, qu'ils besoin de récupérer puis de utiliser pour leurs propres besoins.

ma question est la suivante: mon utilisateur enregistré Envoie un fichier à mon serveur sans Rechargement de la page et récupère l'URL (s) à cette image. Comment puis-je faire cela?

Ce que j'ai essayé:

Tous mes essais étaient des blocages sans continue.

Premièrement, j'ai ajouté deux nouvelles colonnes à deux tables différentes. Mon Tableau des utilisateurs reçut une colonne API_KEY destiné à stocker une clé API si l'utilisateur s'inscrit réellement pour cela. L'autre colonne is_api a été ajoutée à la table dans laquelle je stocke informations d'image , seuls les utilisateurs enregistrés ont leurs images stockées dans la base de données. Avec cette nouvelle colonne (qui était de type tinyint ), je voulais vérifier que l'image provenant de l'utilisateur était (ou non) ajoutée / téléchargée via l'API.

L'utilisateur envoie une demande à mon hôte d'image avec ces paramètres: upload.php? Soumettre = true & action = Upload & Demande = API & Key = _Some_api_key _ . Je prends la clé API et vérifie à qui il appartient -> Récupérer un ID utilisateur basé sur cette touche -> Je stocke l'image sur My Server -> Je stocke les informations d'image dans ma base de données (avoir un identifiant utilisateur maintenant) -> i < Code> Echo Out l'URL.

Mes échecs ici étaient:

  • Je ne pouvais pas envoyer quoi que ce soit du site Web de la tierce partie à mon hôte d'image asynchrone
  • Je n'ai rien pu revenir à mon site Web tiers.

    Pourquoi ces échecs? parce que je n'ai aucune idée de la façon d'atteindre ces deux étapes les plus importantes.

    Une de mes idées pour arrêter d'envoyer des fichiers $ _ [] à mon l'hôte de l'image , essayait d'envoyer une chaîne d'image via Post à mon serveur et créez l'image là-bas moi-même. Je ne pouvais pas faire cela non plus, c'était juste une pensée d'un gars qui avait le temps de penser.

    Alors, c'est ce qui est: mon gros problème sans solution de moi-même.
    Si vous avez besoin de plus d'informations pour m'aider plus facilement, demandez-moi.

    Merci.

    Mise à jour

    Si je pouvais juste recevoir le fichier d'une manière ou d'une autre (asynchrone), je l'enregistrerais dans la base de données avec le champ is_api avec une valeur de 1 , pour le marquer comme mettre via l'API (externe). De cette façon, je pourrais créer un nouveau fichier AA nommé visualis.php peut-être et il accepterait également certains paramètres comme Viewer.php? Demande = API & Key = _api_key _ et il retournerait un Page JSON avec le lien vers la dernière image de ce API externe UTILISATEUR. Récupération de la page via JSON par le site Web tiers serait assez facile. Ainsi, avec cette méthode, j'ai essentiellement besoin de recevoir l'image en quelque sorte dans mon Hôte d'image et la partie récupération ne serait pas trop difficile. Alors, comment j'enverrais une chaîne d'image à mon hôte de l'image via post ?

    Si cette nouvelle idée de mienne est exploitable, merci de me le faire savoir.


7 commentaires

Avez-vous essayé d'envoyer le lien via JSON ou XML à un client AJAX ou l'avez-vous envoyé au client AJAX en texte saisi?


Je n'ai rien essayé avec Json, car je n'ai aucune idée de la façon de l'utiliser, d'où la question. Mes connaissances Ajax sont aussi assez limitées.


On dirait que cela pourrait être traité très simplement dans un iframe qui contient une forme réelle qui publie à l'hôte de l'image. Cela ressemblera à Ajax (comme l'Iframe empêche le poste de page complète) et vous pouvez renvoyer les liens de la page résultante comme réponse directe sur l'IFrame.


@Gavin pourriez-vous me montrer un exemple de ce que vous dites? Peut-être que votre réponse fonctionnerait réellement et je pourrais alors l'accepter.


Jetez un coup d'oeil à ce Viralpatel.net/blogs/... < / a>


Je ne sais pas si c'est faisable. Cela ressemble à quelque chose que le navigateur voudrait s'arrêter en raison des préoccupations de sécurité. La façon dont je l'ai vue, c'est pour que le serveur tiers accepte le téléchargement, puis transférez-le sur le serveur de site d'hébergement d'images sur le serveur. La largeur de bande entre les hôtes est généralement assez élevée, de sorte que les frais généraux sont acceptables.


@cleong J'ai édité la question, veuillez le lire maintenant.


5 Réponses :


2
votes

Essayez d'utiliser

$.getJSON()


0 commentaires

0
votes

On dirait qu'ils utilisent un formulaire Web, vous devez donc utiliser strictement la poste. Il n'y a pas de gémissement à l'aide d'un script quelque part si vous souhaitez que le client vous envoie une chaîne (mais pourquoi les auriez-vous faire cela?).

S'ils sont post-être un formulaire, utilisez la méthode postale, puis une utilisation du script côté serveur met à écrire sur un serveur d'API backend, qui retournera une page JSON avec le lien vers la dernière image. P >

S'ils écrivent directement à l'API, suivez la même convention, à l'exception de votre utilisateur utilisera Met directement (Mettre n'est pas disponible sur des formulaires Web, juste après et obtenez). P>

EDIT: J'ai une solution possible pour vous pour le côté client à l'aide de HTML5. Vous pouvez mettre l'image dans une toile HTML5 et convertir les données en chaîne. Ensuite, prenez simplement cette chaîne et postez-la via la forme. Voir Cette réponse pour plus d'informations sur la façon de faire cela. P>

<label>Image File:</label><br/>
<input type="file" id="imageLoader" name="imageLoader"/>
<canvas id="imageCanvas"></canvas>
<script>
var imageLoader = document.getElementById('imageLoader');
    imageLoader.addEventListener('change', handleImage, false);
var canvas = document.getElementById('imageCanvas');
var ctx = canvas.getContext('2d');


function handleImage(e){
    var reader = new FileReader();
    reader.onload = function(event){
        var img = new Image();
        img.onload = function(){
            canvas.width = img.width;
            canvas.height = img.height;
            ctx.drawImage(img,0,0);
        }
        img.src = event.target.result;
    }
    reader.readAsDataURL(e.target.files[0]);
     /** replace readAsDataURL() with something that will read it to a string.
     Reference: https://developer.mozilla.org/en-US/docs/DOM/FileReader **/
}
</script>


0 commentaires

1
votes

S'il vous plaît jeter un oeil à mon Classe de Resterver sur Github . Cela vous permettra de transformer n'importe quelle classe PHP en un service Web reposant (Retourner les réponses JSON). JSON est la voie à suivre pour que ces types de réponses et Resterver s'occupent d'encoder vos objets de retour en tant que JSON avant de renvoyer les données au client.

Vous pouvez faire des demandes d'obtention comme http://mysite.com/myapi.php?method=sayhello&name=world où la chaîne de requête nécessite un nom de méthode et chaque paramètre de cette méthode. Les demandes postales sont également prises en charge en modifiant simplement votre demande de poste et incluant vos paramètres dans le corps de poste.

Il détectera automatiquement les paramètres nécessaires à la méthode demandée. Vous pouvez configurer une clé d'API secrete et avoir cela comme paramètre requis pour chaque méthode d'API à des fins d'authentification. xxx

alors vous feriez simplement l'appel en utilisant $. Getjson avec jQuery.


0 commentaires

0
votes

Que diriez-vous de recevoir la demande d'origine du site 3ème partie à votre hôte d'image à l'aide de votre message Upload.php thru, puis à l'intérieur de Upload.php, vous acheminez la demande à une autre page à l'aide de l'appel Ajax. De cette façon, il sera asynchrone. Je pense que c'est réalisable de cette façon.


0 commentaires

10
votes

Je fournis un script comme celui-ci à mes utilisateurs en tant que pont sur mon site Web: xxx

puis je fais le reste du traitement sur mon site Web en fonction des informations que je reçois. Je mettrai la mise à jour cette réponse une fois que j'ai terminé l'API CP complet sur mon site Web, où le webmaster qui utilise l'API peut voir quelles images ont été téléchargées via son site Web à mon hôte de l'image. Du script ci-dessus, vous pouvez voir une clé API - elle est unique pour chaque utilisateur, celle ci-dessus n'est qu'un échantillon.

pour asynchrone, je l'ai fait fonctionner en disant aux utilisateurs d'utiliser les jQuery Formulaire plugin. C'est un plugin très pratique pour soumettre des formulaires et je montre à l'utilisateur comment ils le feraient.

Merci pour tous ceux qui ont essayé de m'aider.


0 commentaires