本文实例为大家分享了Nginx代理输出缩放图片的具体代码,供大家参考,具体内容如下
nginx 配置文件:
# document ppt convert Configuration.upstream document.polyv.net { server 127.0.0.1:8080;}server { listen 80; server_name document.polyv.net; index index.html index.htm; charset utf-8; client_max_body_size 1000m; # ignore favicon.ico not exist. location = /favicon.ico { log_not_found off; access_log off; } # not allow to visit hidden files. location ~ //. { deny all; access_log off; log_not_found off; } location / { if ($request_filename ~* ^.*?/.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$) { add_header Content-Disposition: 'attachment;'; add_header Content-Type: 'APPLICATION/OCTET-STREAM'; } proxy_pass http://document.polyv.net; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REQUEST_HOST $host; # include proxy.conf; charset UTF-8; } # user upload files location /images/ { #expires 7d; alias /data03/ovp/blobs/; proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_set_header Accept-Encoding ""; if ( !-f $request_filename ) { proxy_pass http://document.polyv.net; } } location /blobs/ { #expires 7d; alias /data03/ovp/blobs/; } location /preview/images/ { #expires 7d; alias /data03/ovp/blobs/; proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_set_header Accept-Encoding ""; if ( !-f $request_filename ) { proxy_pass http://document.polyv.net; } }}
代理输出缩放图片
package com.document.handle.controller;import java.io.BufferedInputStream;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import com.document.tool.ImageMagickUtils;import com.document.tool.SystemConfig;@Controllerpublic class ImageAgentController { private static final Logger LOG = LoggerFactory.getLogger(ImageAgentController.class); /** * ppt预览图片代理输出 * @throws IOException */ @RequestMapping("/preview/images/{year}/{month}/{md5id}/{preview}/{filename}.{ext}") public void cropImage(@PathVariable String year, @PathVariable String month, @PathVariable String md5id, @PathVariable String preview, @PathVariable String filename, @PathVariable String ext, HttpServletRequest request, HttpServletResponse response) throws IOException { // String rootDir = "/data03/ovp/blobs/"; String rootDir = SystemConfig.getBlobDirectory(); String oname = filename.substring(1, filename.length());// 原图文件名 String dirString = rootDir + year + "/" + month + "/" + md5id + "/" + oname + "." + ext; String targetFileString = rootDir + year + "/" + month + "/" + md5id + "/preview/" + filename + "." + ext; //如果原图存在 File originImage = new File(oname); if(originImage.exists()){ LOG.info("corpImage..." + dirString + " -> " + targetFileString); File newfile = new File(targetFileString); String pathString = newfile.getParent(); LOG.info("pathString...{} {}", pathString); File pathFile = new File(pathString); if (!pathFile.exists()) { LOG.info("---create file---"); pathFile.mkdirs(); } boolean status = ImageMagickUtils.scale(dirString, targetFileString, 240, 180); if (status) { response.reset(); response.setContentType("image/" + ext); java.io.InputStream in = new java.io.FileInputStream(targetFileString); // FilenameUrlUtils.getImageFilename(targetFileString); if (in != null) { byte[] b = new byte[1024]; int len; while ((len = in.read(b)) != -1) { response.getOutputStream().write(b); } in.close(); } } }else{ LOG.info("原图目录不存在-preview:{}",dirString); } } /** * ppt固定尺寸图片代理输出 * @throws IOException * http://document.polyv.net/images/2016/03/de37d2ceb11ac068c18c5e4428541075/jpg-3/1000x540.png * * http://document.polyv.net/images/2016/03/de37d2ceb11ac068c18c5e4428541075/jpg-3.png */ @RequestMapping("/images/{year}/{month}/{md5id}/{filename}/{width}x{height}.{ext}") public void cropfixedImage(@PathVariable String year, @PathVariable String month, @PathVariable String md5id, @PathVariable String filename, @PathVariable Integer width, @PathVariable Integer height, @PathVariable String ext, HttpServletRequest request, HttpServletResponse response) throws IOException { // String rootDir = "/data03/ovp/blobs/"; String rootDir = SystemConfig.getBlobDirectory(); //String oname = filename.substring(1, filename.length());// 原图文件名 String dirString = rootDir + year + "/" + month + "/" + md5id + "/" + ( filename + "." + ext); String targetFileString = rootDir + year + "/" + month + "/" + md5id + "/" + filename + "/" + (width + "x" + height + "." + ext); //如果原图存在 File originImage = new File(dirString); if(originImage.exists()){ File targetFileStringFile = new File(targetFileString); if(!targetFileStringFile.exists()){ LOG.info("corpImage..." + dirString + " -> " + targetFileString); File newfile = new File(targetFileString); String pathString = newfile.getParent(); LOG.info("pathString...{} {}", pathString); File pathFile = new File(pathString); if (!pathFile.exists()) { LOG.info("---create file---"); pathFile.mkdirs(); } ImageMagickUtils.resizeWH(dirString, targetFileString,width,height); } response.setContentType("image/" + ext); java.io.InputStream in = null; try{ in = new java.io.FileInputStream(targetFileString); response.setContentLength(in.available()); byte[] buffer = new byte[1024]; int count = 0; while ((count = in.read(buffer)) > 0) { response.getOutputStream().write(buffer, 0, count); } response.flushBuffer(); }catch(Exception e){ e.printStackTrace(); }finally { try { in.close(); } catch (Exception e) { } } }else{ LOG.info("原图目录不存在:{}",dirString); } } /** * 图片下载 */ @RequestMapping("get/image/data") public void downloadImage(HttpServletRequest request, HttpServletResponse response) throws IOException { String filePath = ServletRequestUtils.getStringParameter(request, "filePath", ""); //图片访问路劲 String fileName = ServletRequestUtils.getStringParameter(request, "fileName", ""); //名称 if(StringUtils.isNotBlank(filePath) || StringUtils.isNotBlank(fileName)){ String destUrl = filePath; //LOG.info("--------------"+filePath); String fileFormat=filePath.substring(filePath.lastIndexOf(".")); //String name=fileName.trim()+fileFormat; String name=filePath.substring(filePath.lastIndexOf("/")+1, filePath.length()); //File f = new File(filePath); //response.setHeader("Content-Disposition", "attachment; filename="+java.net.URLEncoder.encode(f.getName(),"UTF-8")); //LOG.info("--------------"+f.getName()); // 建立链接 URL url = new URL(destUrl); HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection(); // 连接指定的资源 httpUrl.connect(); // 获取网络输入流 BufferedInputStream bis = new BufferedInputStream(httpUrl.getInputStream()); Integer lenf=httpUrl.getContentLength(); //String lenf=this.getFileLength(4189053, 7189053); response.setContentType("application/x-msdownload"); response.setHeader("Content-Length", lenf.toString());//文件大小值5几M response.setHeader("Content-Disposition", "attachment; filename="+java.net.URLEncoder.encode(name,"UTF-8")); OutputStream out = response.getOutputStream(); byte[] buf = new byte[1024]; if (destUrl != null) { BufferedInputStream br = bis; int len = 0; while ((len = br.read(buf)) > 0){ out.write(buf, 0, len); } br.close(); } out.flush(); out.close(); } } }
新闻热点
疑难解答