- 浏览: 25997 次
- 性别:
- 来自: 北京
最新评论
利用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 545如何通过源码构建GlassFish: 方式一、下面 ... -
提高Java代码质量
2014-09-10 15:06 0Java代码质量涉及5个方面,分别是:编码标准 ... -
Java 加密算法相关知识
2014-09-04 12:03 0Java 几种加密算法 1. Base64 编码,它 ... -
Java 如何获得系统环境变量
2014-08-07 14:36 685获得系统环境变量 public static voi ... -
Java 二进制权限控制算法
2013-12-21 12:10 1834二进制权限控制算法,主要是利用了(&,|, ~)运算 ... -
Java 虚拟机 - 内存管理
2013-12-20 13:41 0垃圾回收器 -
Java 虚拟机
2013-12-19 14:58 0HotSpot 是Java虚拟机较新的技术,代替 ... -
Java 开源工具 Apache Common Lang
2013-12-18 17:38 2628Commons Lang 扩展了标准 jav ... -
Java 基础知识 - 集合框架
2013-12-12 13:34 0所谓框架就是一个类集,它形成了创建高级功能 ... -
Java 基础知识 - String 为什么是不可改变的
2013-12-02 14:42 1106String字符串不可改变,查阅了很多资料, ... -
Java 如何获取当前时间前一个小时的时间
2013-07-18 15:48 13926在网上找好多类似文章或者帖子,绝大部分都是不正 ...
相关推荐
Java利用HttpURLConnection发送post请求上传文件
下面小编就为大家带来一篇利用HttpUrlConnection 上传 接收文件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
8.11 将手机文件上传至网站服务器——模拟HTTPFORM的POSTACTION 8.12 移动博客发布器——以XML-RPC达成远程过程调用 8.13 移动RSS阅读器——利用SAXParser解析XML 8.14 远程下载安装Android程序——APKInstaller的...
再有如通过HTTP来上传文件呢?不需要头疼,这些问题有了“它”就很容易解决了! <br>我们不可能列举所有可能的顽固,我们会针对几种最常见的问题进行处理。当然了,正如前面说到的,如果我们自己使用java.net....
11.1.7 使用HttpURLConnection 11.1.8 使用AndroidHttpClient 11.1.9 使用后台线程(AsyncTask) 11.1.10 使用AsyncTask处理配置更改 11.1.11 使用DownloadManager获取文件 11.2 使用Android服务 ...
11.1.7 使用HttpURLConnection 11.1.8 使用AndroidHttpClient 11.1.9 使用后台线程(AsyncTask) 11.1.10 使用AsyncTask处理配置更改 11.1.11 使用DownloadManager获取文件 11.2 使用Android服务 ...