8
votes

Comment faire un lien temporaire pour un fichier téléchargeable

Je fais un projet pour un lien de téléchargement temporaire pour moi pour protéger le fichier de Hotlinkers ...

Je pense que cela est possible de le faire .. Parce que nous savons tous que beaucoup de site de partage de fichiers "< em> ne veux pas mentionner de "... leur lien pour le fichier a une expiration ...

ex.

Si je télécharge un fichier de leur site Ils donnent un lien direct pour cliquer dessus correctement? Mais alors ce lien expirera juste après quelques heures ou quelques minutes.

Comment dois-je savoir que le lien a été expiré? Si je copie le même lien sur mon gestionnaire de téléchargement après un jour, il ne peut pas télécharger le même fichier.

J'ai déjà fait cela possible dans haccesses . < p> ex. xxx

S'ils copient le lien direct dans la barre d'adresse du navigateur, ils seront redirigés dans http://domain.com

mais s'ils copient le lien direct sur leur gestionnaire de téléchargement, le fichier sera téléchargé. < / p>

Et si elles postent le lien dans un autre site comme le site Web du Forum, Blog, etc., Et demandez au lecteur de copier et collez le lien dans son gestionnaire de téléchargement, de sorte qu'ils puissent le télécharger directement.

C'est le problème que je veux empêcher de protéger mon fichier. Je fais cela sur php mais je ne peux pas comprendre ...

Votre aide est très appréciée.


0 commentaires

5 Réponses :


2
votes

Utilisez du code comme celui-ci xxx

Ajoutez ceci à votre fichier .htaccess xxx


1 commentaires

Vous ne devriez pas utiliser .htaccess pour cela car il deviendra immuable car vous avez plus de fichiers et de différents endroits.



0
votes

La solution qui me vient à l'esprit est la suivante: Si vous avez une table qui représente un fichier et, par exemple, Filemodel, vous pouvez enregistrer le nom du fichier, quelques détails, une taille, un chemin d'accès au fichier dans votre système de fichiers et un point unique, ce qui peut résulter du MD5 à partir de certaines des données que vous choisissez. Il repose sur certains détails de fichier par exemple: xxx pré>

à chaque fois avant de laisser quelqu'un télécharger votre fichier, vous vérifiez s'il y a une valeur unique dans votre table si vous laissez donc quelqu'un de télécharger avec votre méthode de téléchargement Créé dans Filemodel, mais juste avant de faire une nouvelle unique pour empêcher davantage de téléchargements p> xxx pré>

s'il n'y a pas de valeur unique si unique dans votre base de données, vous vient de montrer une erreur sur Lien délai à l'utilisateur p> xxx pré>

Ici, je pars vous assume un exemple de prototype d'action que vous pouvez commencer par votre contrôleur: p>

function download($file_data = ''){
        $data = $this->FileModel->find('first', array('conditions' => array('FileModel.unique' => $file), 'fields' => array('*')));

        if(!is_array($data[FileModel])) $this -> setFlashError('link expired');

        else
        {
            $data[FileModel]['unique'] = md5(time() . $data[$this -> name]['file']);
            $this -> FileModel-> save($data[$this -> name]);
            if(!$this -> FileModel -> downloadFile($data[$this -> name]))
            {
                $this -> setFlashError('error'));
            }
        }
}


0 commentaires

24
votes

lien à quelque chose comme / téléchargements / abb76b3acbd954a05bea357144d614b4 , où abb ... est une chaîne aléatoire telle qu'un hachage salé de l'heure actuelle. Lorsque vous faites ce lien pour quelqu'un, stockez la chaîne aléatoire dans une table de base de données. Cette table pourrait ressembler à: xxx

lorsque vous recevez une demande au / téléchargements /..., recherchez la chaîne aléatoire et renvoyez le fichier correct. Si le créé horodatage est trop vieux, ne le faites pas. Utilisez un cronjob pour nettoyer les anciens rangées de table ou moins idéalement, faites-le à chaque fois que quelqu'un apporte une demande à / téléchargements /....


1 commentaires

Je pense que c'est facile et propre mais il y a toujours des chances que quelqu'un télécharge le fichier.



0
votes

Celui que j'ai trouvé: xxx


0 commentaires

0
votes

Je connais cette vieille question mais j'ai le moyen de télécharger le fichier juste 1 fois sans utiliser de base de données, de manière rapide :) xxx


0 commentaires