- 浏览: 576726 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1267在许多应用中,由于jvm内存太小,不足以支持应用. jvm的内 ... -
代码规范
2012-05-11 10:31 1346一直以来,很多同学都在思考和问我: 代码该如果规范? 怎么来优 ... -
java公共工具包
2012-05-10 15:07 1268前人栽树,后人乘凉 结合多年的开发经验,汇集了许多同学的智慧 ... -
Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability 临时解决方法
2010-07-15 16:49 2785\u0023这种做为参数名应该出现几率不高 ... -
答复: 高负载系统,网络参数调整
2010-04-08 09:33 1220测试后发现,修改前后,没有太大的变化! 1.TCP ... -
答复: 基于jgroup封装,方便rpc调用,失效通知
2010-04-01 19:21 1260失效通知 一、服务端的使用 1.将接口com.so ... -
基于jgroup封装,方便rpc调用,失效通知
2010-04-01 18:42 2005jgroup的优势、劣势,我这里就不想做过多的讨论了。 如果 ... -
GC OutOfMemoryError
2009-07-29 09:39 1111The parallel collector will thr ... -
commons-collections-3.2的bug
2009-07-24 15:34 1570使用commons-collections-3.2的LRUMa ... -
关于jgroups在resin3.1以上版本的应用
2008-10-25 16:49 1711基于jgroups的程序,在resin3.0.X环境中一切正常 ... -
使用appfuse2.0快速搭建环境(myeclipse)
2008-02-04 16:53 4130通常我们使用APPFUSE2.0的项目,导入eclipse里, ...
相关推荐
ngx_upload_module是Nginx的一个第三方...前端提交文件至Nginx,Nginx负责存储和传递文件信息,后端Java应用则可以专注于业务逻辑处理,如文件迁移、转码等。这种方式不仅简化了处理流程,还提升了系统的并发处理能力。
在IT行业中,Nginx是一款广泛应用的高性能反向代理服务器,因其高效稳定和灵活的配置而备受青睐。这里我们关注的是一个包含特定模块的Nginx配置:`nginx1.16`,`nginx-upstream-check-module-master` 和 `nginx-...
首先,我们需要在项目中引入`fastdfs-client-java`依赖。通常,可以通过Maven或Gradle将该库添加到构建文件中。对于Maven用户,可以在`pom.xml`文件中添加如下依赖: ```xml <groupId>org.csource <artifactId>...
在实际应用中,Nginx通常作为前端服务器,处理静态文件请求,而将动态请求转发给后端的Tomcat处理。 2. **文件下载** 在Nginx中,可以通过配置`location`指令来指定处理特定路径下的文件下载请求。同时,Nginx支持...
- 在浏览器中访问 `http://localhost` 来确认 Nginx 是否正常工作。 #### FastDFS 安装与配置 FastDFS 是一个轻量级的分布式文件系统,提供了文件存储和检索功能。 1. **下载 FastDFS:** - 访问官方网站或 ...
Nginx作为一款高性能的HTTP和反向代理服务器,它在处理文件上传时,为了提高效率和稳定性,会默认将上传的数据临时存储在本地内存或磁盘中,然后一次性转发到后端应用服务器。然而,这种行为在某些情况下可能会造成...
在`ckeditorUploadImgApi.java`中,可能包含了处理图片上传的函数,比如`uploadImage()`,这个函数会接收前端通过CKEditor发送的图片数据,然后将图片保存到服务器的指定目录,并返回一个包含上传结果的JSON对象,...
1. 异常处理:在实际应用中,需要对可能出现的网络异常、文件操作异常等进行捕获和处理,保证系统的健壮性。 2. 并发支持:在高并发环境下,可以考虑使用线程池来优化文件上传下载的效率,同时避免过多的并发请求对...
在IT行业中,文件上传是常见的应用场景,特别是在Web开发中。本教程将重点讲解如何使用SpringBoot、Nginx和FTP来实现图片资源的上传。这个压缩包“file-upload.rar”包含了一个实际工作中的实例,旨在帮助开发者理解...
在Java Web开发环境中,集成FCKeditor可以提升用户体验,使得内容创建和编辑更为便捷。下面将详细介绍如何在Java Web项目中配置和使用FCKeditor。 1. **下载与解压** 首先,你需要从FCKeditor的官方网站下载最新...
在本文中,我们将深入探讨如何使用SpringBoot与Nginx集成来实现资源上传功能。SpringBoot以其简洁的配置和强大的功能被广泛应用于构建微服务应用,而Nginx则是一款高性能的HTTP和反向代理服务器,常用于处理静态资源...
在本篇文章中,我们将深入探讨其Java客户端——`fastdfs-client-java`的使用方法、核心特性以及实际应用场景。 `fastdfs-client-java`是FastDFS官方提供的Java语言版本的客户端库,版本号为1.29,它允许Java开发者...
在Java中实现上传文件图片到指定服务器目录是非常重要的功能,它可以帮助开发者快速实现文件上传功能。本文将通过实例代码,详细介绍Java实现上传文件图片到指定服务器目录的相关知识点。 一、Java文件上传的基本...
这需要在Nginx配置中启用防盗链规则,并在Java客户端生成和验证Token。 6. **生成缩略图**:FastDFS本身并不支持直接生成缩略图,但可以在Java客户端处理上传的图片后生成缩略图,再上传到FastDFS。另一种方式是在...
FastDFS提供了Java客户端API,用于在Java应用中与FastDFS交互。首先,将FastDFS的Java客户端jar包添加到项目类路径中。然后,可以创建FastDFSClient实例,通过它来执行文件上传、下载、删除等操作。 例如,文件上传...
- 提供的`fastdfs_client_java.tar.gz`包是FastDFS的Java客户端,可以用于Java应用中与FastDFS交互。 9. **网络协议**: - FastDFS使用自定义的二进制协议进行通信,这使得它能高效地处理大量小文件的上传和下载...
在Java的Spring框架中,可以通过在Controller方法上添加注解`@CrossOrigin`来开启CORS。例如,在上述示例的`FileController`类的`upLoad`方法中,可以添加以下代码: ```java @CrossOrigin(origins = "*", ...
在实际应用中,需要注意安全性问题,如限制文件大小、验证文件类型、避免路径遍历攻击等。此外,上传的文件通常不应保存在Web应用的根目录下,以防止直接访问。 8. **结果展示**: 文件上传成功后,可以将文件的...
根据给定文件的信息,我们可以提炼出以下几个核心知识点: ### 一、自媒体文章发布与管理系统架构 ...这对于Java开发者来说是一份非常实用的学习资料,能够帮助他们快速掌握相关技能并应用于实际项目开发中。