http请求(二) ---- 文件上传工具
public class FormFile { // 上传文件的数据 private byte[] data; private InputStream inStream; // 文件名称 private String filename; // 表单名称 private String formname; // 内容类型 private String contentType = "application/octet-stream"; public FormFile(String filename, byte[] data, String formname, String contentType) { this.data = data; this.filename = filename; this.formname = formname; if (contentType != null) { this.contentType = contentType; } } public FormFile(String filename, InputStream inStream, String formname, String contentType) { this.filename = filename; this.formname = formname; this.inStream = inStream; if (contentType != null) { this.contentType = contentType; } } public byte[] getData() { return data; } public void setData(byte[] data) { this.data = data; } public InputStream getInStream() { return inStream; } public void setInStream(InputStream inStream) { this.inStream = inStream; } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String getFormname() { return formname; } public void setFormname(String formname) { this.formname = formname; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } }
public class HttpUploadRequester { /** * 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能: <FORM METHOD=POST * ACTION="http://192.168.0.200:8080/ssi/fileload/test.do" * enctype="multipart/form-data"> <INPUT TYPE="text" NAME="name"> <INPUT * TYPE="text" NAME="id"> <input type="file" name="imagefile"/> <input * type="file" name="zip"/> </FORM> * * @param actionUrl * 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器, * 你可以使用http://192.168.1.10:8080这样的路径测试) * @param params * 请求参数 key为参数名,value为参数值 * @param file * 上传文件 */ // http协议中分割符,随便定义 private static final String HTTP_BOUNDARY = "---------9dx5a2d578c2"; private static final String MULTIPART_FORM_DATA = "multipart/form-data"; private static final String LINE_ENTER = "\r\n"; // 换行 回车 private static final int RESPONSE_OK = 200; public static String post(String urlPath, Map<String, String> params, FormFile[] formFiles) { try { URL url = new URL(urlPath); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setReadTimeout(5 * 1000); conn.setDoOutput(true); // 发送POST请求, 必须设置允许输出 conn.setUseCaches(false); conn.setRequestProperty("Connection", "Keep-Alive"); // 维持长链接 conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + HTTP_BOUNDARY); StringBuilder formItemData = new StringBuilder(); // 构建 表单字段内容 for (Map.Entry<String, String> entry : params.entrySet()) { formItemData.append("--"); formItemData.append(HTTP_BOUNDARY); formItemData.append(LINE_ENTER); formItemData.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"\r\n\r\n"); formItemData.append(entry.getValue()); formItemData.append(LINE_ENTER); } DataOutputStream outStream = new DataOutputStream( conn.getOutputStream()); // 发送表单字段内容到服务器 outStream.write(formItemData.toString().getBytes()); // 发送上传文件数据 for (FormFile fileData : formFiles) { StringBuilder fileSplit = new StringBuilder(); fileSplit.append("--"); fileSplit.append(HTTP_BOUNDARY); fileSplit.append(LINE_ENTER); fileSplit.append("Content-Disposition: form-data;name=\"" + fileData.getFormname() + "\";filename=\"" + fileData.getFilename() + "\"\r\n"); fileSplit.append("Content-Type:" + fileData.getContentType() + LINE_ENTER + LINE_ENTER); outStream.write(fileSplit.toString().getBytes()); if (fileData.getInStream() != null) { byte[] buffer = new byte[1024]; int length = 0; while ((length = fileData.getInStream().read()) != -1) { outStream.write(buffer, 0, length); } fileData.getInStream().close(); } else { outStream.write(fileData.getData(), 0, fileData.getData().length); } outStream.write(LINE_ENTER.getBytes()); } // 数据结束标志 byte[] endData = ("--" + HTTP_BOUNDARY + "--" + LINE_ENTER) .getBytes(); outStream.write(endData); outStream.flush(); outStream.close(); int responseCode = conn.getResponseCode(); if (responseCode != RESPONSE_OK) { throw new RuntimeException("请求url失败"); } InputStream is = conn.getInputStream(); int ch; StringBuilder b = new StringBuilder(); while ((ch = is.read()) != -1) { b.append((char) ch); } Log.i("HttpPost", b.toString()); conn.disconnect(); return b.toString(); } catch (Exception e) { throw new RuntimeException(); } } // 上传单个文件 public static String post(String urlPath, Map<String, String> params, FormFile formFiles) { return post(urlPath, params, new FormFile[] { formFiles }); } }
// 以表单方式发送请求 public static void sendDataToServerByForm() throws Exception { Map<String, String> params = new HashMap<String, String>(); params.put("method", "sendDataByForm"); params.put("strData", "字符串数据"); // 获取SDCard中的good.jpg File file = new File(Environment.getExternalStorageDirectory(), "app_Goog_Android_w.png"); FormFile fileData = new FormFile("app_Goog_Android_w.png", new FileInputStream(file), "fileData", "application/octet-stream"); HttpUploadRequester.post( "http://192.168.0.2:8080/AndroidWebServer/server.do", params, fileData); }
发表评论
-
SoftReference,WeakReference&WeakHashMap
2011-05-12 16:57 937SoftReference,WeakReference& ... -
java http请求(一) ---- 工具
2011-05-12 16:55 1188http请求(一) ---- 工具 2 ... -
Eclipse J2ME环境搭建
2010-12-17 20:58 1064我假设你已经装了Eclipse ... -
JAVA写的文件操作小工具
2010-12-13 21:26 993好久没有写过代码了,陌生的不得了,很多东西都忘记了,写了个小 ... -
[andriod]运行程序后弹出: The application *** has stopped unexpectedly. Please try
2010-09-17 07:40 99851. 运行程序后弹出: The application ... -
JAVA实现post和get请求
2010-09-16 11:16 2661使用Java发送post请求 import java ... -
JSP中文显示乱码解决方案(转自csdn)
2010-05-10 15:03 1410JSP中文显示乱码解决方案 一、JSP页面显示乱码 二、表 ... -
SQLHelper类(JAVA版)
2010-05-04 20:45 1134/** *作者:devilishking *em ...
相关推荐
在`java-ipfs-http-client-master`压缩包中,包含了这个库的源代码,你可以深入了解其实现细节,包括如何处理HTTP请求、解析响应以及如何封装IPFS的API调用。通过阅读源码,开发者可以学习如何构建与IPFS网络的交互...
Form-Data 是一种常见的 HTTP 请求体格式,广泛应用于文件上传、表单提交等场景。下面是 Java 模拟发送 Form-Data 的请求方式的详细介绍。 什么是 Form-Data Form-Data 是一种 MIME 类型,用于描述表单数据的格式...
`FileUploadServlet.java`是处理文件上传请求的Servlet,它需要实现`doPost`方法,该方法会接收到包含上传文件的HTTP请求。在这个方法里,我们需要创建一个`ServletFileUpload`实例,它是`CommonsFileUpload`提供的...
该工具类使用httpclient进行http or https请求,包括requestbody格式和form表单格式,另外含文件服务器中转上传方法,几乎支持所有常用接口调用,内含详细注释和说明文件,含jar包,及maven方式引用,拿过去直接用吧
总之,Apache Commons IO和Apache Commons FileUpload是Java开发中处理文件上传不可或缺的工具。它们提供了丰富的功能,帮助开发者安全、高效地完成文件上传操作,同时也大大减少了处理文件上传时可能出现的问题。在...
4. "proguard-google-http-client.txt":ProGuard是一个Java代码混淆器、优化器和裁剪器,此文件可能包含针对Google HTTP Java客户端的特定ProGuard配置,用于优化和保护发布时的代码。 5. "dependencies":可能是一...
在实际开发中,你还需要考虑错误处理和异常捕获,确保在文件上传过程中遇到问题时能够妥善处理。此外,如果SharePoint的访问控制较为严格,可能需要使用ADAL(Active Directory Authentication Library)来获取访问...
在IDEA中,你可以使用Maven或Gradle构建项目,导入必要的依赖,例如Spring MVC或Jersey来处理HTTP请求,实现文件上传和下载的Controller。同时,IDEA的调试和测试功能可以帮助你快速定位和修复代码中的问题。 总的...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
在Java环境中,`fastdfs-client-java`是用于连接FastDFS服务器的客户端库,使得Java应用能够方便地进行文件上传、下载等操作。本文将详细探讨`fastdfs-client-java-1.29-SNAPSHOT.jar`这一核心组件,以及与其相关的`...
以下是对"java文件上传下载工具类"这一主题的详细解释。 首先,让我们了解文件上传。在Web应用中,用户可能需要上传文件,如图片、文档或视频。Java通过Servlet API提供了处理文件上传的功能。Servlet 3.0及以上...
在Java中,处理多文件上传通常涉及到Servlet API,特别是`Part`接口,它是Java EE 7引入的一个用于处理HTTP请求中的多媒体内容部分的接口。`Part`接口允许我们读取上传文件的内容,包括文件名、大小以及内容本身。...
2. **负载均衡**:通过Tracker服务器对Storage服务器进行动态负载均衡,使得文件上传和下载的请求能够均匀分布到各个节点,减少单个服务器的压力。 3. **文件冗余备份**:支持文件的冗余备份,提供高可用性,保证...
在这个项目中,"解决405错误"指的是在使用Java IPFS HTTP API进行文件上传或下载时遇到的方法不允许(Method Not Allowed)的HTTP错误。405错误通常发生在客户端尝试使用服务器不支持的HTTP请求方法,例如,可能尝试...
支持get请求,post请求,支持文件上传和下载。 使用方法: 代码很简单,只有三个Java文件,建议下载后将Java文件拷贝到工程中使用。 封装的功能有: 一般的get请求 一般的post请求 一般的put请求 一般的...
总结来说,"上传文件工具类"是Java应用程序中用于处理文件上传的核心组件,涉及到网络通信、文件操作、异常处理、安全控制等多个核心编程概念。理解和掌握这些知识点对于任何Java开发者来说都是至关重要的。
3. **文件上传**:通过客户端API将本地文件上传至FastDFS系统,上传过程中,FastDFS会自动进行负载均衡和文件复制,确保高可用性。 4. **文件下载**:根据文件的存储路径,从FastDFS系统中下载文件到本地。 5. **...
当文件上传请求到达服务器时,这些方法会接收文件流,保存到服务器的磁盘上,或者将其存储到数据库或云存储服务中。处理上传的Java代码需要考虑到文件大小限制、错误处理、文件命名规则以及安全性等方面的问题。 ...
2. **上传图片**:调用`AipOcr.imageBase64()`或`AipOcr.imageUrl()`方法,将本地图片文件转化为Base64编码或提供图片URL,作为识别请求的数据源。 3. **选择识别模式**:根据需求选择合适的OCR接口,如`AipOcr....
而Apache Commons FileUpload则专门用于处理HTTP请求中的多部分数据,即文件上传。 二、Servlet基础知识 Servlet是Java平台上的一个服务器端组件,用于扩展Web服务器的功能。在文件上传和下载场景中,Servlet接收...