Maison  >  Questions et réponses  >  le corps du texte

Problème avec nginx gérant le chemin réel des images

Dans le projet, les fichiers téléchargés sont renommés par sha1. Une fois une image téléchargée, elle est nommée c2e47454e951697811c0531949d4d318.
Le chemin d'accès côté navigateur est : /img/c2e47454e951697811c0531949d4d318. la photo !

Après mon déploiement, je dois utiliser nginx pour le traitement de la mise en cache. Alors, laissez-moi vous demander, comment dois-je gérer cela :

.
怎么在nignx里配置映射到真实的 image_save_path/img/c2/e4/7454e951697811c0531949d4d318.[jpg|gif|png]

location ~/img/*$ {
    root image_real_path_here;
    # 此处不太理解该如何处理图片名称的前四个字符,变成路径形式,        
}

S'il vous plaît, aidez-moi beaucoup ! Merci

怪我咯怪我咯2713 Il y a quelques jours464

répondre à tous(1)je répondrai

  • 仅有的幸福

    仅有的幸福2017-05-16 17:23:57

    Tout d'abord, puisque vous l'avez déjà sha1, vous n'avez plus besoin de stocker son nom de suffixe Lors du stockage, remplacez tout par la valeur sha1

    .

    Ensuite, si vous accédez directement à Nginx pour obtenir l'image, vous n'obtiendrez pas le nom de fichier correct, et certaines autres logiques ne sont pas faciles à gérer, alors écrivez simplement un contrôleur pour le gérer :

        @RequestMapping(value = "imgs/{sha1}/download", method = RequestMethod.GET)
        @ResponseBody
        public HttpEntity<byte[]> downloadAttachment(@PathVariable("sha1") String sha1)
                throws UnsupportedEncodingException {
            Attachment attachment = attachmentService.getBySha1(sha1);
    
            if (attachment == null) {
                throw new ResourceNotFoundException();
            }
    
            HttpHeaders header = new HttpHeaders();
            header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            String filename = new String(attachment.getName().getBytes("GB2312"), "ISO_8859_1");
            header.setContentDispositionFormData("attachment", filename);
            header.add("X-Accel-Redirect", String.format("/img/c2/e4/%s", sha1));
            header.add("X-Accel-Charset", "utf-8");
    
            return new HttpEntity<byte[]>(null, header);
        }

    De cette façon, vous pouvez non seulement utiliser le cache de Nginx, mais également utiliser votre propre code pour effectuer certaines opérations logiques, et vous pouvez également ajouter la fonction de jugement d'autorisation

    De plus, la configuration de Nginx n'a pas besoin d'être modifiée

    répondre
    0
  • Annulerrépondre