- 浏览: 570633 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yeruby:
请教下,这个命令会将kube-scheduler的所有日志输出 ...
二、master的安装 -
107x:
不错,谢谢!
kerberos安装配置 -
yhq1212:
如何禁止NGINX先本地缓存呢
nginx upload在java中的应用 -
lcy651:
写的很好、学习了
Nginx的安装 -
huangyunbin:
楼主现在是做运维了吗
mysql的安装,CXXFLAGS
1.Nginx上传介绍
文件在POST上传到nginx服务器时,nginx会自己将这个文件先保存下来,然后再往后端发送。
在这个过程中,文件会被保存成一个临时文件,待文件传送完成后,nginx向后端(如resin)通知临时文件的文件信息(如上传文件原有的文件名、存在本地磁盘哪个目录下、临时文件名、文件的md5、文件的类型、文件的大小等)。
后端服务拿到这个文件名可以直接读取缓存的文件,进行迁移转码等后续逻辑。
2.安装
下载nginx upload模块
http://www.grid.net.ru/nginx/upload.en.html
在nginx添加该模块
3.配置nginx.conf
指定上传文件的大小
二、.resin端程序的接收
1.上传的页面index.html
2.添加一个Servlet.修改web.xml
3.编写Servlet,
将file的信息封装到upFiles的map中。
页面的其他信息(如:test),封装到agrs的map中
2。对应nginx传递的参数,封装的对象
3.业务处理uploadManager就按自己的需求写就可以了
文件在POST上传到nginx服务器时,nginx会自己将这个文件先保存下来,然后再往后端发送。
在这个过程中,文件会被保存成一个临时文件,待文件传送完成后,nginx向后端(如resin)通知临时文件的文件信息(如上传文件原有的文件名、存在本地磁盘哪个目录下、临时文件名、文件的md5、文件的类型、文件的大小等)。
后端服务拿到这个文件名可以直接读取缓存的文件,进行迁移转码等后续逻辑。
2.安装
下载nginx upload模块
http://www.grid.net.ru/nginx/upload.en.html
tar zxvf nginx_upload_module-2.2.0.tar.gz
在nginx添加该模块
./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.11 --with-http_stub_status_module --with-http_realip_module --add-module=/root/nginx_upload_module-2.2.0 --add-module=/root/masterzen-nginx-upload-progress-module-3d8e105/
3.配置nginx.conf
# Upload form should be submitted to this location location /upload { # Pass altered request body to this location upload_pass @test; upload_pass_args on; upload_max_file_size 1m; # Store files to this directory # The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should exist upload_store /tmp 1; # Allow uploaded files to be read only by user upload_store_access user:r; # Set specified fields in request body upload_set_form_field "${upload_field_name}.name" $upload_file_name; upload_set_form_field "${upload_field_name}.content_type" $upload_content_type; upload_set_form_field "${upload_field_name}.path" $upload_tmp_path; # Inform backend about hash and size of a file #upload_aggregate_form_field "${upload_field_name}.md5" $upload_file_md5; upload_aggregate_form_field "${upload_field_name}.crc32" $upload_file_crc32; upload_aggregate_form_field "${upload_field_name}.size" $upload_file_size; upload_pass_form_field "^submit$|^test$"; upload_cleanup 400 404 499 500-505; } # Pass altered request body to a backend location @test { proxy_pass http://resin; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
指定上传文件的大小
keepalive_timeout 200; client_max_body_size 100m;
二、.resin端程序的接收
1.上传的页面index.html
<html> <head> <title>Test upload</title> </head> <body> <form enctype="multipart/form-data" action="/upload.so" method="post"> <input type="hidden" name="test" value="上传"> 选择文件1: <input type="file" name="filename1" /> <br /> 选择文件2: <input type="file" name="filename2" /> <br /> 选择文件3: <input type="file" name="filename3" /> <br /> <input type="submit" value="上载" /> </form> </body>
2.添加一个Servlet.修改web.xml
<servlet> <servlet-name>upload</servlet-name> <servlet-class>com.XXX.servlet.Upload</servlet-class> </servlet> <servlet-mapping> <servlet-name>upload</servlet-name> <url-pattern>/upload.so</url-pattern> </servlet-mapping>
3.编写Servlet,
将file的信息封装到upFiles的map中。
页面的其他信息(如:test),封装到agrs的map中
package com.XXXX.web.servlet; import java.io.IOException; import java.lang.reflect.Method; import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.XXXX.model.UpFile; import com.XXXX.UploadManager; /** * @author winston * */ public class Upload extends HttpServlet{ private final Log log = LogFactory.getLog(Upload.class); private Map<String, UpFile> upFiles = new HashMap<String, UpFile>(); private Map<String, String> agrs = new HashMap<String, String>(); private ServletInputStream sis = null; // private byte[] b = new byte[4096]; // private static String rturl = "http://XXXXXX/ok.html"; public static final String FILE_NAME="filename"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext application = getServletContext(); WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);//获取spring的context UploadManager uploadManager = (UploadManager) wac.getBean("uploadManager"); sis = request.getInputStream(); int a = 0; int k = 0; String s = ""; while ((a = sis.readLine(b, 0, b.length)) != -1) { s = new String(b, 0, a); if ((k = s.indexOf("name=\"")) != -1) { String fieldName = s.substring(k + 6, s.length() - 3); sis.readLine(b, 0, b.length); StringBuffer fieldValue = new StringBuffer(b.length); while ((a = sis.readLine(b, 0, b.length)) != -1) { s = new String(b, 0, a - 2); if ((b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { break; } else { fieldValue.append(s); } } if(fieldName.startsWith(FILE_NAME)){ setField(fieldName, fieldValue.toString()); }else{ agrs.put(fieldName, fieldValue.toString()); } // fields.put(fieldName, fieldValue.toString()); } } //业务处理 uploadManager.saveUpload(upFiles, agrs); response.sendRedirect(rturl); } private void setField(String file_name, String file_value){ String[] str = file_name.split("\\."); UpFile upFile = null; if(upFiles.containsKey(str[0])){ upFile = upFiles.get(str[0]); }else{ upFile = new UpFile(); } String fieldName = str[1]; String value = file_value; String setMethodName = "set" + Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1); try { Method setMethod = upFile.getClass().getMethod(setMethodName, String.class); if (value != null) { setMethod.invoke(upFile, value); } } catch (Exception e) { e.printStackTrace(); log.error(MessageFormat.format("Could not set ''{0}.{1} with value {2}", upFile, fieldName, value)); } upFiles.put(str[0], upFile); } }
2。对应nginx传递的参数,封装的对象
package com.XXX.model; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; public class UpFile { private String name; private String content_type; private String path; private String crc32; private String size; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getContent_type() { return content_type; } public void setContent_type(String content_type) { this.content_type = content_type; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getCrc32() { return crc32; } public void setCrc32(String crc32) { this.crc32 = crc32; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("name", this.name) .append("content_type", this.content_type) .append("path", this.path) .append("crc32", this.crc32) .append("size", this.size) .toString(); } /** * @see java.lang.Object#equals(Object) */ public boolean equals(Object object) { if (!(object instanceof UpFile)) { return false; } UpFile rhs = (UpFile) object; return new EqualsBuilder().appendSuper(super.equals(object)).append( this.content_type, rhs.content_type) .append(this.size, rhs.size).append(this.path, rhs.path) .append(this.crc32, rhs.crc32).append(this.name, rhs.name) .isEquals(); } /** * @see java.lang.Object#hashCode() */ public int hashCode() { return new HashCodeBuilder(-404694209, 2059458549).appendSuper( super.hashCode()).append(this.content_type).append(this.size) .append(this.path).append(this.crc32).append(this.name) .toHashCode(); } }
3.业务处理uploadManager就按自己的需求写就可以了
发表评论
-
jvm参数
2013-10-30 20:17 1230在许多应用中,由于jvm内存太小,不足以支持应用. jvm的内 ... -
代码规范
2012-05-11 10:31 1317一直以来,很多同学都在思考和问我: 代码该如果规范? 怎么来优 ... -
java公共工具包
2012-05-10 15:07 1223前人栽树,后人乘凉 结合多年的开发经验,汇集了许多同学的智慧 ... -
Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability 临时解决方法
2010-07-15 16:49 2746\u0023这种做为参数名应该出现几率不高 ... -
答复: 高负载系统,网络参数调整
2010-04-08 09:33 1177测试后发现,修改前后,没有太大的变化! 1.TCP ... -
答复: 基于jgroup封装,方便rpc调用,失效通知
2010-04-01 19:21 1214失效通知 一、服务端的使用 1.将接口com.so ... -
基于jgroup封装,方便rpc调用,失效通知
2010-04-01 18:42 1968jgroup的优势、劣势,我这里就不想做过多的讨论了。 如果 ... -
GC OutOfMemoryError
2009-07-29 09:39 1074The parallel collector will thr ... -
commons-collections-3.2的bug
2009-07-24 15:34 1537使用commons-collections-3.2的LRUMa ... -
关于jgroups在resin3.1以上版本的应用
2008-10-25 16:49 1678基于jgroups的程序,在resin3.0.X环境中一切正常 ... -
使用appfuse2.0快速搭建环境(myeclipse)
2008-02-04 16:53 4101通常我们使用APPFUSE2.0的项目,导入eclipse里, ...
相关推荐
在这个过程中,文件会被保存成一个临时文件,待文件传送完成后,nginx向后端(如resin)通知临时文件的文件信息(如上传文件原有的文件名、存在本地磁盘哪个目录下、临时文件名、文件的md5、文件的类型、文件的大小等...
Nginx upload modules
包含upload-module的nginx-1.21.6,针对windows平台64位的编译的二进制(exe)文件。 为了upload-module能在window平台编译通过,进行部分代码修改,修改内容详见https://github.com/chnykn/bimface
Nginx+upload+lua实现简单文件上传服务
nginx-upload-progress模块源码,用于nginx配置获取文件上传进度。
nginx-upload-module模块源码,用于nginx配置文件上传功能
nginx-upload 上传工具的javaweb请求处理服务
我用nginx1.8.0,编译nginx upload模块的时候报有些函数和成员找不到(upload不兼容新版本的nginx),后来在网上找了解决方法,将打好的包上传到这里。亲测可用。
Nginx应用程序在Java中的应用
java分布式项目中,运用ftp客户端实现图片上传,nginx提供http服务实现图片回显
nginx-1.16.1.tar.gz + nginx-upload-module-2.3.0.tar.gz
nginx-upload-module安装压缩包
也是IMAP/POP3/SMTP代理服务器,是由俄罗斯人lgor Sysoev开发,支持模块加载和卸载,其中upload_module和upload_progress_module就是第三方开发的模块,并没有加入到Nginx的源码中,upload_module是上传文件到服务器...
利用yum(黄狗)安装nginx,mysql,通过下载tomcat,jdk并安装。此处用mysql数据库(修改明文密码为复杂密码,不区分大小写设置)。设置tomcat,nginx相应的端口,路径等等。有需要即下载吧!
nginx-upload-module安装依赖包,包括了 ngx_cache_purge-2.3.tar.gz,zlib-1.2.11.tar.gz,pcre2-10.32.tar.gz,nginx-upload-module-2.2.zip
nginx1.16版本 后端节点健康检查、自动隔离+nginx_upstream_check_module-master+nginx-upload-module
nginx-upload-progress-module 是 Nginx 的文件上传时支持进度显示的扩展模块。 标签:nginx
解析nginx配置文件,并将nginx配置文件格式化成对象,方便java程序管理nginx配置。解析配置文件并非使用正则匹配,而是使用语法分析树处理解决的。 标签:nginx
把java开发的war包后更新到linux服务器后,通过本资源的配置nginx+tomcat实现两台服务器负载均衡,并配置了https的访问方式,并同时支持ipv6网络的访问
nginx_upload_module-2.2.0.tar.gz