- 浏览: 308304 次
- 性别:
- 来自: 河南开封
-
文章分类
最新评论
-
keven_niu:
好不错哦。。
jquery dialog对话框插件实例弹层效果 -
我是云:
zjuttsw 写道zjuttsw 写道楼主最后两个例子很好。 ...
Java switch-case语句用法 -
ytt06460105:
问题已解决。
使用JDBC访问DB2的问题:no db2jdbc in java.library.path -
ytt06460105:
楼主:按照你的方法做了,又出现了新的错误:[com.aliba ...
使用JDBC访问DB2的问题:no db2jdbc in java.library.path -
zjuttsw:
zjuttsw 写道楼主最后两个例子很好。学习了 不过第三条好 ...
Java switch-case语句用法
Java代码
Java代码
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 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; } }
Java代码
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 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 }); } } Java代码 // 以表单方式发送请求 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); }
发表评论
-
log4j.properties配置详解
2011-12-02 17:53 833Log4J的配置文件(Configuration File)就 ... -
Spring MVC 介绍
2011-09-21 13:53 1876大部分的Java应用都是基于Web的,作为轻量级的JavaEE ... -
WdatePicker日历控件使用方法
2011-07-22 17:54 1018http://www.uxiu.com/templates/u ... -
struts2中<s:bean name="org.apache.struts2.util.Counter" id="counter">循环标签的使用
2011-07-13 17:38 3205struts2随提供了循环控制标签<s:iterator ... -
jquery dialog对话框插件实例弹层效果
2011-06-10 11:23 8149本文章是利用了jquery dia ... -
三大框架的技术起源
2010-08-23 13:45 1117Struts、Hibernate和Spring是 ...
相关推荐
本篇文章将详细讲解一个用于HTTP请求提交的类工具,以及如何利用它进行测试。 首先,我们需要理解HTTP请求的基本概念。HTTP请求是由客户端(如浏览器或自定义应用程序)向服务器发送的,用来获取、提交数据或者执行...
POST请求的数据放在请求体中,可以携带大量数据,适用于表单提交或上传文件。 2. **请求接口封装**: - 封装HTTP请求接口工具类是为了简化开发,统一处理网络请求的逻辑,包括错误处理、连接超时、重试策略等。...
Base64工具类-字符编码工具类-数据类型转换-日期工具类-Escape中文转码工具类-fastjson工具类-文件工具类-Http工具类-http请求工具类-用于模拟HTTP请求中GET/POST方式 -图片处理工具类-Ip工具类-mail工具类-Map工具...
1. Form Data:适用于表单提交,如文件上传。 2. URL-encoded:用于键值对形式的数据传输,常见于POST请求。 3. Raw:可直接输入JSON、XML或其他格式的原始数据。 4. Binary:用于上传二进制文件。 六、响应处理 1....
本文将详细讲解如何通过Servlet实现文件上传的功能,重点在于解析HTTP请求消息的内容,以便获取并处理上传的文件数据。 首先,我们需要了解HTTP请求的基本结构。一个HTTP请求通常包括请求行、请求头和请求体。在...
例如,可以创建一个HTTP POST请求,携带文件上传到服务器,同时进行身份验证和错误处理。连接池管理可以优化大量并发请求的性能,而HttpMime则确保了文件上传过程的正确性。 总之,Apache HttpClient 4.4.1、...
本文将详细解析如何使用C语言实现基于HTTP的文件上传和下载功能。 首先,我们要理解HTTP的基本原理。HTTP是一个无状态、基于请求-响应模型的协议,用于在Web上交换数据。它通过TCP/IP连接进行通信,用户代理(如...
当用户发起文件上传请求时,`nginx-upload`模块会在前端接收并暂存文件,然后将文件元数据(如文件名、大小等)通过自定义的HTTP头传递给后端的应用服务器。应用服务器根据这些信息进行业务逻辑处理,如验证权限、...
3. **文件下载原理**:HTTP文件下载通常通过发送GET请求到服务器,服务器响应包含文件内容的HTTP响应。PB应用作为客户端,可以通过建立HTTP连接,发送请求,并接收服务器返回的文件流,然后将其保存到本地。 4. **...
在Vue.js中,实现文件上传功能是常见的需求,尤其是在构建交互丰富的Web应用时。本篇将详细介绍Vue.js中实现多文件上传的相关知识点,以及如何使用`vue-upload-component`这个开源组件来帮助我们实现这一功能。 ...
而Apache Commons FileUpload则专门针对文件上传场景,它能够解析HTTP协议中的多部分请求,将接收到的数据分割成单独的字段,包括文件内容。 标题"fileupload commons-io上传文件"指的是使用Commons IO和FileUpload...
这使得开发者能够在HTTP请求中附带复杂的数据,例如表单数据、文件上传或者多种媒体类型的组合。 在httpmime-4.1.1版本中,关键类包括MultipartEntity和MultipartFormEntity,它们是用来构造MIME多部分实体的。...
在本文中,我们将深入探讨如何使用Visual FoxPro(VFP)将文件上传到Web服务器,主要涉及的技术包括XMLHTTP和XMLDOM。这两种技术是VFP与Web服务交互的重要工具,让我们一起详细了解它们。 1. Visual FoxPro(VFP)...
HttpClient是Apache基金会开发的一个HTTP客户端库,主要用于在Java应用程序中执行...这些组件和类库是理解和实现HTTP文件上传的关键,对于任何需要与Web服务器交互的Java应用来说,HttpClient都是一个不可或缺的工具。
6. **执行POST请求**:调用 `TIdHTTP.Post` 方法,传入URL和数据流对象,执行文件上传。同时,你可以传递一个 `TStringList` 对象来接收服务器返回的数据,例如: ``` Response := TStringList.Create; try ...
以下是一个简单的使用httpmime-4.25.jar发送POST请求并上传文件的Java代码示例: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(...
3. **文件上传**:在HTTP POST请求中上传文件,需要将文件内容编码成二进制流,并在Content-Type头中指定`multipart/form-data`。每个文件都应包含一个边界标识符,以区分不同的文件或字段。 4. **JSON数据**:JSON...
总之,通过结合Spring MVC的文件上传能力和Jersey Client的HTTP请求功能,我们可以实现远程文件上传,这对于分布式系统或者需要跨服务器协作的场景非常有用。同时,理解并熟练掌握这两个工具对于提升Java Web开发...
在IT行业中,文件上传是许多Web应用程序不可或缺的功能,特别是在处理多文件或图片的场景下。"多文件预览上传-多图片预览上传"是一个专为JAVA开发的解决方案,它允许用户在实际上传之前预览文件,特别是图片,提高了...
- `Formidable`:用于解析HTTP请求中的表单数据,特别适用于文件上传。 - `fs-extra`:扩展Node.js内置的`fs`模块,提供更丰富的文件系统操作功能。 7. **项目结构** - 在解决方案资源管理器中创建"Scripts...