- 浏览: 26448 次
- 性别:
- 来自: 北京
最新评论
利用HttpURLConnection上传文件
简单需求:将文件和文件名称都上传到服务器上
客户端:
package upload; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class UploadFile2 { /** * 获得与服务的连接 * @return * @throws Exception */ public HttpURLConnection getConnection() throws Exception { // 服务器的URL URL url = new URL("http://localhost:8080/RvmService/InitServlet"); HttpURLConnection uc = (HttpURLConnection) url.openConnection(); // 上传图片的一些参数设置 uc.setRequestProperty( "Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-quickviewplus, */*"); uc.setRequestProperty("Accept-Language", "zh-cn"); uc.setRequestProperty("Content-type", "multipart/form-data; boundary=---------------------------7d318fd100112"); uc.setRequestProperty("Accept-Encoding", "gzip, deflate"); uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); uc.setRequestProperty("Connection", "Keep-Alive"); uc.setDoOutput(true); uc.setUseCaches(true); return uc; } /** * 上传文件 * @param f * @return * @throws Exception */ public String upload(File f) throws Exception { HttpURLConnection uc = getConnection(); // 获取文件流 int size = (int) f.length(); byte[] data = new byte[size]; FileInputStream fis = new FileInputStream(f); OutputStream out = uc.getOutputStream(); fis.read(data, 0, size); // 写入文件名 out.write(f.getName().trim().getBytes()); // 写入分隔符 out.write('|'); // 写入图片流 out.write(data); out.flush(); out.close(); fis.close(); // 读取响应数据 int code = uc.getResponseCode(); String sCurrentLine = ""; // 存放响应结果 String sTotalString = ""; if (code == 200) { java.io.InputStream is = uc.getInputStream(); BufferedReader reader = new BufferedReader( new InputStreamReader(is)); while ((sCurrentLine = reader.readLine()) != null) if (sCurrentLine.length() > 0) sTotalString = sTotalString + sCurrentLine.trim(); } else { sTotalString = "远程服务器连接失败,错误代码:" + code; } return sTotalString; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub UploadFile2 upload = new UploadFile2(); File f = new File("D:\\RVMCENTER.jar"); try { System.out.println(upload.upload(f)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
服务端:
package com.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; 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; public class InitServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("aaa"); System.out.println("Context Length : " + request.getContentLength()); ServletInputStream inStream = request.getInputStream(); // 取HTTP请求流 int size = request.getContentLength(); // 取HTTP请求流长度 byte[] buffer = new byte[size]; // 用于缓存每次读取的数据 byte[] result = new byte[size]; // 用于存放结果的数组 int count = 0; int rbyte = 0; // 循环读取 while (count < size) { rbyte = inStream.read(buffer); // 每次实际读取长度存于rbyte中 sflj for (int i = 0; i < rbyte; i++) { result[count + i] = buffer[i]; } count += rbyte; } // 先找到文件名和图片流的标志位'|' int index = 0; for (int i = 0; i < result.length; i++) { byte b = result[i]; if (b == '|') { index = i; break; } } // 存放文件名 byte name[] = new byte[index + 1]; // 存放图片字节 byte[] img = new byte[size - index]; for (int i = 0; i < result.length; i++) { if (i < index) { name[i] = result[i]; } if (i > index) { // 这时注意img数组的index要从0开始 img[i - index - 1] = result[i]; } } // 还原文件名 String fileName = new String(name); inStream.close(); String newFileName = fileName; // 响应客戶端 response.setContentType("text/html"); // 注意响应中文数据时要设置 response.setCharacterEncoding("GBK"); PrintWriter out = response.getWriter(); //可能情況 0 数据库无响应记录 1 文件名不符合要求 其它情況为正常 if(newFileName.equals("0")) { out.write("0|" + fileName); } else if(newFileName.equals("1")) { out.write("1|" + fileName); } else { out.write(fileName); } out.close(); //上传错误中止后续操作 if(newFileName.length()<= 1) { return; } ServletContext servlet = this.getServletContext(); File f = new File(servlet.getRealPath("/") + "/" + newFileName); FileOutputStream fos = new FileOutputStream(f); fos.write(img); fos.flush(); fos.close(); System.out.println("aaaa" + servlet.getRealPath("/") + "/" + newFileName); } /** * 接收文件 * @param req * @throws ServletException * @throws IOException */ public void receiveFile(HttpServletRequest req) throws ServletException, IOException { ServletContext servlet = this.getServletContext(); InputStream in = req.getInputStream(); File f = new File(servlet.getRealPath("/") + "/dowload/aaaa.txt"); FileOutputStream fos = new FileOutputStream(f); // ObjectInputStream ins = new ObjectInputStream(in); byte[] b = new byte[1024 * 1024]; int totalBytes, bytes, sumBytes = 0; totalBytes = req.getContentLength(); while (true) { bytes = in.read(b); if (bytes <= 0) break; sumBytes += bytes; fos.write(b, 0, bytes); System.out.println(sumBytes + " of " + totalBytes + " " + ((float) sumBytes / (float) totalBytes) * 100 + "% done"); } fos.close(); in.close(); } }
发表评论
-
如何通过源码构建GlassFish
2014-10-01 09:57 604如何通过源码构建GlassFish: 方式一、下面 ... -
提高Java代码质量
2014-09-10 15:06 0Java代码质量涉及5个方面,分别是:编码标准 ... -
Java 加密算法相关知识
2014-09-04 12:03 0Java 几种加密算法 1. Base64 编码,它 ... -
Java 如何获得系统环境变量
2014-08-07 14:36 717获得系统环境变量 public static voi ... -
Java 二进制权限控制算法
2013-12-21 12:10 1870二进制权限控制算法,主要是利用了(&,|, ~)运算 ... -
Java 虚拟机 - 内存管理
2013-12-20 13:41 0垃圾回收器 -
Java 虚拟机
2013-12-19 14:58 0HotSpot 是Java虚拟机较新的技术,代替 ... -
Java 开源工具 Apache Common Lang
2013-12-18 17:38 2663Commons Lang 扩展了标准 jav ... -
Java 基础知识 - 集合框架
2013-12-12 13:34 0所谓框架就是一个类集,它形成了创建高级功能 ... -
Java 基础知识 - String 为什么是不可改变的
2013-12-02 14:42 1139String字符串不可改变,查阅了很多资料, ... -
Java 如何获取当前时间前一个小时的时间
2013-07-18 15:48 14029在网上找好多类似文章或者帖子,绝大部分都是不正 ...
相关推荐
在Android开发中,有时我们需要将本地的文件...通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器端如何接收和处理这些文件也是至关重要的。
以下是一个简化的示例代码片段,演示如何使用`HttpURLConnection`上传文件: ```java import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class FileUploader { public static ...
下面我们将详细讨论如何利用HttpURLConnection上传图片。 首先,我们需要获取到用户选择或拍摄的图片。这通常通过Intent来完成,例如启动系统的相机应用或者文件选择器,让用户选择本地图片。一旦图片被选定,可以...
在Android中,使用`HttpURLConnection`进行文件上传的步骤如下: 1. 创建`HttpURLConnection`实例并连接到服务器的上传接口URL。 2. 设置请求方法为`POST`。 3. 设置`Content-Type`为`multipart/form-data`,并指定...
在本文中,我们将深入探讨如何利用HttpURLConnection实现文件上传和接收的功能。 首先,我们看客户端(发送文件)的实现: 1. 创建URL对象,指定上传文件的服务器地址和文件名参数,例如:`...
本文将详细介绍如何利用HttpURLConnection实现Android应用中的断点续传功能。 首先,理解断点续传的概念。断点续传是指当下载或上传文件过程中因网络问题中断后,可以从上次中断的位置继续进行,而不是重新开始。这...
本文将深入探讨“Netroid框架”和“HttpURLConnection类”的使用,并通过一个文件下载的示例来阐述如何利用它们进行文件传输,同时关注性能指标如下载速度。 **Netroid框架** Netroid是一个轻量级的Android网络...
这些文件可能包含了如何利用`HttpURLConnection`进行更复杂交互的示例,比如处理JSON响应、使用HTTPS安全连接、实现断点续传等。 总结来说,`HttpURLConnection`是Java中进行HTTP通信的基础工具,它提供了连接、...
"Java 实现利用 HTTP 基于 Servlet 上传文件至服务器" 文件上传概述 文件上传是指客户端将文件传输到服务器端的过程。在 Web 开发中,文件上传是非常常见的操作,例如上传头像、上传文件等。在 Java 中,可以使用 ...
总结,Android的文件上传涉及文件选择、读取、压缩、转换为流,以及利用Multipart请求将数据发送到服务器。同时,配合JSON数据可以传递更多的业务信息。理解并熟练运用这些技术,能够帮助开发者实现高效且稳定的文件...
在上传文件前,我们通常会先将文件读入到内存或流中,然后通过网络接口(如HttpURLConnection或者第三方库如Retrofit、OkHttp)发送到服务器。 接着,文件上传过程中显示进度条涉及网络编程和UI更新的知识。Android...
1. **Android客户端上传文件**:在Android应用中,我们通常使用`HttpURLConnection`或第三方库如`OkHttp`进行网络请求。文件上传是通过POST请求实现的,其中文件以多部分/表单数据格式发送。在创建请求时,需要设置...
本篇内容主要涉及如何利用`HttpURLConnection`实现多线程下载大文件,这是在CS(计算机科学)领域中常见的网络编程技术。 1. **创建Web项目并发布** 在运行包含多线程下载代码的Java程序之前,你需要先创建一个Web...
合理利用它,可以构建高效、安全的网络通信机制,实现丰富的功能,如登录注册、数据同步、文件上传下载等。同时,随着Retrofit、OkHttp等现代网络库的出现,开发者可以更便捷地进行网络编程,但理解底层原理仍然是...
例如,使用Spring Boot时,可以利用`@RequestParam`注解接收上传的文件,并通过`FileSystemResource`或`PathResource`来处理。 在提供的压缩包文件“bed90cbdb33448b5a1d25bd0eb7471fd”中,可能包含了实现上述功能...
本篇文章将详细介绍如何利用Java编程语言结合Spring MVC框架来实现文件的远程上传功能。具体实现过程中,我们会采用HTTP协议中的`POST`方法,并通过`multipart/form-data`编码格式来传输数据。 #### 关键概念和技术...
文件上传通常涉及到网络请求,Android提供了多种方式来实现,如使用HttpURLConnection、HttpClient(已废弃)或第三方库如Volley、OkHttp等。以OkHttp为例,它是一个高效的HTTP客户端,支持异步和同步请求。创建一个...
3. **HTTP通信**:上传文件通常使用HTTP的POST或PUT方法,Android应用通常会使用`HttpURLConnection`或第三方库如OkHttp来创建网络请求。文件内容通常会被编码为`multipart/form-data`格式,这样可以在单个HTTP请求...
3. 将`HttpURLConnection`对象设置为POST请求,因为文件上传通常使用POST方法。 4. 设置请求头,比如Content-Type,用于指定上传的数据类型。 5. 使用`setDoOutput(true)`开启写入模式,准备写入数据。 6. 通过`...
- HTTP客户端:利用Android的HttpURLConnection或者第三方库如OkHttp,建立与服务器的连接,发起POST请求并将文件数据发送出去。 - 进度显示:提供UI反馈,展示文件上传进度,提升用户体验。 - 错误处理:对网络...