nginx处理图片实际路径的问题

【字号: 日期:2022-07-10浏览:31作者:雯心

问题描述

项目中对上传的文件,进行一次sha1的重新命名,一张图片上传后被命名为c2e47454e951697811c0531949d4d318在浏览器端的访问路径是:/img/c2e47454e951697811c0531949d4d318,注意是没有图片的后缀名的!

我部署之后,我需要通过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的配置不需要改变

相关文章: