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; } } }
代理程式輸出縮放圖片
rrreee圖片縮放的業務
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; @controller public 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 * https://cache.yisu.com/upload/ask_collection/20210726/113/19154.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(); } } }
伺服器上要安裝imagemagick。
以上是Nginx代理輸出縮放圖片怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!