nginx處理圖片實際路徑的問題
怪我咯
怪我咯 2017-05-16 17:21:57
0
1
514

專案中對上傳的文件,進行一次sha1的重新命名,一張圖片上傳後被命名為c2e47454e951697811c0531949d4d318
在瀏覽器端的訪問路徑是:/img/c2e47454e9516981114834ddc !

我部署之後,我需要透過nginx來做快取處理,那麼,請問一下大夥,我該怎麼處理呢:

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

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

請各位大大幫忙!謝謝

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(1)
仅有的幸福

首先,你既然已經將其sha1過了,就不需要再儲存其後綴名了,儲存時將所有都改變為sha1後的值

然後,如果直接訪問Nginx來獲取圖片的話是得不到正確的文件名的,有些其他的邏輯也不好處理,所以乾脆寫一個controller來做處理:

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

這樣既可以使用Nginx的緩存,又可以使用自己的程式碼做一些邏輯操作,還可以加入權限判斷的功能

另外Nginx的設定不需要改變

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板