Rumah  >  Soal Jawab  >  teks badan

Masalah dengan nginx mengendalikan laluan sebenar imej

Dalam projek, fail yang dimuat naik dinamakan semula oleh sha1 Selepas gambar dimuat naik, ia dinamakan c2e47454e951697811c0531949d4d318
Laluan akses di bahagian penyemak imbas ialah: /img/c2e47454e919054e914578e914578e914578e919994e91999d x nama untuk gambar!

Selepas saya menggunakan, saya perlu menggunakan nginx untuk pemprosesan caching Jadi, izinkan saya bertanya kepada anda, bagaimana saya harus menanganinya:

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

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

Tolong bantu saya banyak-banyak! Terima kasih

怪我咯怪我咯2713 hari yang lalu466

membalas semua(1)saya akan balas

  • 仅有的幸福

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

    Pertama sekali, oleh kerana anda sudah sha1'd, anda tidak perlu menyimpan nama akhirannya lagi Apabila menyimpan, tukar semuanya kepada nilai sha1

    Kemudian, jika anda mengakses Nginx secara langsung untuk mendapatkan imej, anda tidak akan mendapat nama fail yang betul, dan beberapa logik lain tidak mudah dikendalikan, jadi tulis sahaja pengawal untuk mengendalikannya:

        @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);
        }

    Dengan cara ini, anda bukan sahaja boleh menggunakan cache Nginx, tetapi juga menggunakan kod anda sendiri untuk melakukan beberapa operasi logik, dan anda juga boleh menambah fungsi penghakiman kebenaran

    Selain itu, konfigurasi Nginx tidak perlu diubah

    balas
    0
  • Batalbalas