- 浏览: 496010 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (271)
- json (6)
- hibernate (12)
- javascript (25)
- session cookie (2)
- struts2 (12)
- 数据库 (23)
- spring (25)
- freemarker (2)
- 其它 (17)
- ibatis (5)
- Web Service (5)
- java基础 (54)
- hessian (2)
- lucene (7)
- DWR (1)
- 导出excel (1)
- CSS (1)
- java 邮件 (5)
- SSH转载 (5)
- 文件断点 上传 (8)
- jQuery (7)
- ant (2)
- tuscany (5)
- maven (7)
- rsa (2)
- tomcat (2)
- svn (3)
- comet (2)
- log4j (2)
- linux (4)
- hadoop (1)
- 设计模式 (4)
- ssh (2)
- git (3)
- quartz (1)
- dubbo (2)
- mysql (2)
- 注解 (1)
- easyui (1)
- tree (1)
- 堆栈 (1)
- 泛型 (1)
- eclipse (1)
- annotation (1)
- mvc (3)
- shiro (1)
- Nexus (1)
- jackson (1)
- itext (1)
- mina (1)
- nio (1)
- ehcache (2)
- memcached (1)
- restful (2)
- mongodb (1)
- solr (1)
- zookeeper (1)
- redis (1)
- vpn (0)
- elastic (2)
- xxl-job (1)
最新评论
-
g_tao:
作者你好,你这个例子中服务端是跑在tomcat中吗
阿里巴巴dubbo处理文件上传下载 -
g_tao:
作者你好,能把整个项目给我发一份吗?guotao114@126 ...
阿里巴巴dubbo处理文件上传下载 -
tanmingjuntan:
楼上 本文提供的代码样例 和 你之前提供的例子有出入好多都没 ...
使用HttpURLConnection.setChunkedStreamingMode(10*1024);的时候,不同的参数导致文件上传损坏 -
dreamoftch:
dannielhome 写道请问下这个upload.exe是什 ...
断点文件上传流程 -
dannielhome:
请问下这个upload.exe是什么东西呢
断点文件上传流程
修改过的:
客户端:
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; public class t { public static void main(String[] args) throws IOException { URL postUrl = new URL("http://localhost:8080/test_client/callback.action"); HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); DataOutputStream out = new DataOutputStream(connection.getOutputStream()); String content = "fileInfo="+URLEncoder.encode("file1", "utf-8")+"¶m="+URLEncoder.encode("pppp","utf-8");//多个参数中间用&连接 out.writeBytes(content); out.flush(); out.close(); // flush and close BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; System.out.println(" ============================= "); System.out.println(" Contents of post request "); System.out.println(" ============================= "); while ((line = reader.readLine()) != null) { System.out.println(line); } System.out.println(" ============================= "); System.out.println(" Contents of post request ends "); System.out.println(" ============================= "); reader.close(); } }
import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import com.lubansoft.test.upload.po.UploadRecord; public class TestClient { public static void main(String[] args) { TestClient client = new TestClient(); client.upload(); } private void upload() { try { String boundary = "------WebKitFormBoundaryUey8ljRiiZqhZHBu"; String url = "http://localhost:8080/upload/FileUpLoad"; URL u = new URL(url); HttpURLConnection conn = (HttpURLConnection) u.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestMethod("POST"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); // 指定流的大小,当内容达到这个值的时候就把流输出 conn.setChunkedStreamingMode(10240); OutputStream out = new DataOutputStream(conn.getOutputStream()); byte[] end_data = ("\r\n--" + boundary + "--\r\n").getBytes();// 定义最后数据分隔线 List<String> list = new ArrayList<String>(); list.add("e:/userInfo.properties"); list.add("e:/email.html"); StringBuilder sb = new StringBuilder(); //添加form属性 sb.append("--"); sb.append(boundary); sb.append("\r\n"); sb.append("Content-Disposition: form-data; name=\"username\""); sb.append("\r\n\r\n"); sb.append("hello word"); out.write(sb.toString().getBytes("utf-8")); out.write("\r\n".getBytes("utf-8")); int leng = list.size(); for (int i = 0; i < leng; i++) { String fname = list.get(i); File file = new File(fname); sb = new StringBuilder(); sb.append("--"); sb.append(boundary); sb.append("\r\n"); sb.append("Content-Disposition: form-data;name=\"file" + i + "\";filename=\"" + file.getName() + "\"\r\n"); sb.append("Content-Type:application/octet-stream\r\n\r\n"); byte[] data = sb.toString().getBytes(); out.write(data); DataInputStream in = new DataInputStream(new FileInputStream( file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } out.write("\r\n".getBytes()); // 多个文件时,二个文件之间加入这个 in.close(); } out.write(end_data); out.flush(); out.close(); // 定义BufferedReader输入流来读取URL的响应 BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (Exception e) { System.out.println("发送POST请求出现异常!" + e); e.printStackTrace(); } } }服务器端:
package com.lubansoft.test.upload.web.servlet; import java.io.*; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; /** * * @author Administrator * 文件上传 * 具体步骤: * 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包 * 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同 * 3)对 DiskFileItemFactory 对象设置一些 属性 * 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); * 目的是调用 parseRequest(request)方法 获得 FileItem 集合list , * * 5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理 * 6) * 第一种. 用第三方 提供的 item.write( new File(path,filename) ); 直接写到磁盘上 * 第二种. 手动处理 * */ public class FileUpLoad extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); //设置编码 //获得磁盘文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //获取文件需要上传到的路径 HttpSession session = request.getSession(); String path = session.getServletContext().getRealPath("/uploadFiles"); //如果没以下两行设置的话,上传大的 文件 会占用 很多内存, //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 /** * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的 * 然后再将其真正写到 对应目录的硬盘上 */ factory.setRepository(new File(path)); //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 factory.setSizeThreshold(1024*1024) ; //高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); try { //可以上传多个文件 List<FileItem> list = (List<FileItem>)upload.parseRequest(request); for(FileItem item : list) { //获取表单的属性名字 String name = item.getFieldName(); //如果获取的 表单信息是普通的 文本 信息 if(item.isFormField()) { //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的 String value = item.getString() ; request.setAttribute(name, value); } //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些 else { /** * 以下三步,主要获取 上传文件的名字 */ //获取路径名 String value = item.getName() ; if(value == null || value.equals("")){ continue; } //索引到最后一个反斜杠 int start = value.lastIndexOf("\\"); //截取 上传文件的 字符串名字,加1是 去掉反斜杠, String filename = value.substring(start+1); request.setAttribute(name, filename); //真正写到磁盘上 //它抛出的异常 用exception 捕捉 //item.write( new File(path,filename) );//第三方提供的 //手动写的 OutputStream out = new FileOutputStream(new File(path,filename)); InputStream in = item.getInputStream() ; int length = 0 ; byte [] buf = new byte[1024] ; System.out.println("获取上传文件的总共的容量:"+item.getSize()); // in.read(buf) 每次读到的数据存放在 buf 数组中 while( (length = in.read(buf) ) != -1) { //在 buf 数组中 取出数据 写到 (输出流)磁盘上 out.write(buf, 0, length); } in.close(); out.close(); } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } request.getRequestDispatcher("fileDemo.jsp").forward(request, response); } }
发表评论
-
文件上传
2013-06-06 09:00 0授权: import java.util.ArrayLi ... -
servlet 下载文件 以及 下载文件名字 中文乱码 解决 处理
2013-05-23 11:33 3909import java.io.BufferedInputSt ... -
自定义协议调用QQ
2013-05-22 23:20 1111通过 <a href="t ... -
使用HttpURLConnection.setChunkedStreamingMode(10*1024);的时候,不同的参数导致文件上传损坏
2013-05-17 15:44 3727bug修改之后的代码: import java.i ... -
获取文件的md5
2013-05-15 15:06 1686import java.io.File; import ... -
断点文件上传流程
2013-05-14 16:27 2400服务器和客户端交互过程中用到的属性: 文件名: ... -
HttpURLConnection setChunkedStreamingMode()
2013-05-14 14:32 4859在使用HttpURLConnection.setChunk ... -
HttpURLConnection servlet 多文件参数 断点上传
2013-05-06 10:58 2034断点上传 水平较菜 ,多包涵 完善之后的代码:(不再通过 ...
相关推荐
总之,`HttpURLConnection`与Servlet配合处理多文件参数和断点上传,需要理解HTTP协议、多部分表单数据、流式上传以及服务器端的相应处理。在实际项目中,根据需求选择合适的技术和库,优化代码以提升性能和用户体验...
在Java编程环境中,当需要与Web服务器交互,例如上传文件时,`HttpURLConnection`是一个常见的选择,因为它提供了灵活且高效的方式。...在实际项目中,可能还需要处理错误、进度反馈、多文件上传等复杂情况。
JAVA通过HttpURLConnection上传和下载...这些方法可以帮助开发者快速实现文件上传和下载的功能,从而提高开发效率和质量。同时,HttpURLConnection也可以用于发送其他类型的HTTP请求,例如GET、POST、PUT、DELETE等。
HttpURLConnection实现三方接口HTTP调用调用,带有FILE文件参数
在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...
* 高效:HttpURLConnection可以实现高效的数据传输,适合大文件上传。 * 广泛支持:HttpURLConnection是Java语言中的标准类,广泛支持各种操作系统和服务器。 然而,使用HttpURLConnection实现附件上传也存在一些...
在实际开发中,Android单文件和多文件上传是一个相对复杂的流程,涉及到客户端与服务器端的交互,理解并熟练掌握这一过程对提升Android应用的用户体验至关重要。通过不断实践和优化,可以打造出高效、稳定且用户友好...
在Java编程中,发送POST请求并上传文件是一个常见的任务,特别是在与服务器进行数据交互时。在本场景中,我们使用`HttpURLConnection`类...通过这种方式,你可以实现自定义的文件上传逻辑,而不依赖于特定的库或框架。
- 大多数服务器要求文件上传使用`multipart/form-data`格式,因为它可以携带多个部分,包括文件和额外的参数。 - 在Android客户端,可以使用`HttpURLConnection`的`setFixedLengthStreamingMode()`或`...
综上所述,"android和tomcat文件上传和数据交互"这个主题涵盖了Android客户端开发、网络编程、文件操作、Struts2框架的使用、Tomcat服务器配置、以及JSON或XML数据交换等多个技术点。在实际项目中,开发者需要熟练...
本教程将深入探讨如何实现这一功能,同时提供客户端和服务端的源码示例,特别关注多文件上传的处理。 首先,客户端部分是Android应用的核心,负责与用户交互并执行文件上传操作。Android SDK提供了多种方式来实现...
为了进一步增强封装的灵活性,可以考虑支持PUT、DELETE等其他HTTP方法,同时添加支持上传文件、下载文件的功能。另外,可以使用线程池管理并发请求,提高性能。 总的来说,封装HTTPURLConnection是一项基础但重要的...
5. **集成与使用**:由于提供了详细的说明文档(安卓STE文件上传架构说明.doc),开发者可以根据文档指导,将安卓端和服务器端的jar包导入项目,配置好相关参数,快速实现文件上传功能。 综上所述,"安卓STE文件...
在本文中,我们将深入探讨如何利用HttpURLConnection实现文件上传和接收的功能。 首先,我们看客户端(发送文件)的实现: 1. 创建URL对象,指定上传文件的服务器地址和文件名参数,例如:`...
在 Android 中,我们可以使用 HttpUrlConnection 或者 OkHttp 等库来实现文件上传下载。 五、实现文件上传下载的步骤 1. 创建文件上传下载的界面,包括文件路径输入框和上传下载按钮。 2. 获取文件路径和参数信息...
本文将详细解析如何在Android系统中实现文件上传,主要围绕"Android文件上传"这一主题展开,结合提供的博客链接以及压缩包内的示例代码(test和struts2fileupload)进行说明。 首先,理解文件上传的基本流程至关...
这里我们主要关注使用`HttpURLConnection`来实现多参数文件上传。关键在于构造符合HTTP协议格式的请求体,并设置正确的请求头。 在上述代码中,我们定义了一个名为`mulpost`的方法,接收三个参数:`actionUrl`...
在本文中,我们将深入探讨如何使用Golang和Android的HttpURLConnection来实现文件上传功能。首先,我们要明白,文件上传是Web应用中常见的功能,通常涉及客户端(如Android应用)将本地文件发送到服务器进行存储或...
- **Multipart上传**:在文件上传中,通常使用`MultipartEntity`或`RequestBody`创建多部分表单数据,包含文件和额外参数。 2. **Android权限管理** - 在Android 6.0及以上版本,需要在运行时动态请求`READ_...