永久链接: http://gaojingsong.iteye.com/blog/2414484
预览文章: 【Http文件上传协议解析】
首先是请求头:
最重要的内容是Content-Type,他的内容中是:
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6TAB8KxvuJTZYfUn
用分号隔开了不同的参数:
第一个参数multipart/form-data是必须的,是指提交的表单中有附件
第二个参数boundary表示分割线,请求体中会用来分割不同的请求参数
至于其他参数,在自己写请求的时候直接模仿传过去即可。
核心代码
package com.example.fileupload.controller;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Set;
public class HttpUrlConnectionDemo {
/**
* @param args
*/
public static void main(String[] args) {
// 上传文件测试
String actionURL ="http://localhost:9090/mgr/upload";
String uploadFile="c:/examples.cfg";
HashMap<String, String> parameters = new HashMap<String, String>();
parameters.put("email", "demo@123.com");
singleFileUploadWithParameters( actionURL, uploadFile, parameters );
}
/**
* @author Johnson
* @method singleFileUploadWithParameters
* @description 集上传单个文件与传递参数于一体的方法
* @param actionURL 上传文件的URL地址包括URL
* @param fileType 文件类型(枚举类型)
* @param uploadFile 上传文件的路径字符串
* @return String("" if no response get)
* @attention 上传文件name为file(服务器解析)
* */
public static String singleFileUploadWithParameters(String actionURL, String uploadFile,
HashMap<String, String> parameters){
String end = "\r\n";
String twoHyphens = "--";
String boundary = "---------------------------7e0dd540448";
String response = "";
try{
URL url = new URL(actionURL);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//发送post请求需要下面两行
connection.setDoInput(true);
connection.setDoOutput(true);
//设置请求参数
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
//获取请求内容输出流
DataOutputStream ds = new DataOutputStream(connection.getOutputStream());
String fileName = uploadFile.substring(uploadFile.lastIndexOf("/") + 1);
//开始写表单格式内容
//写参数
Set<String> keys = parameters.keySet();
for(String key : keys){
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; name=\"");
ds.write(key.getBytes());
ds.writeBytes("\"" + end);
ds.writeBytes(end);
ds.write(parameters.get(key).getBytes());
ds.writeBytes(end);
}
//写文件
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; " + "name=\"file1\"; " + "filename=\"");
//防止中文乱码
ds.write(fileName.getBytes());
ds.writeBytes("\"" + end);
ds.writeBytes("Content-Type: text/plain" + end);
ds.writeBytes(end);
//根据路径读取文件
FileInputStream fis = new FileInputStream(uploadFile);
byte[] buffer = new byte[1024];
int length = -1;
while((length = fis.read(buffer)) != -1){
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
fis.close();
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
ds.writeBytes(end);
ds.flush();
try{
//获取URL的响应
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
String s = "";
String temp = "";
while((temp = reader.readLine()) != null){
s += temp;
}
response = s;
reader.close();
}catch(IOException e){
e.printStackTrace();
System.out.println("No response get!!!");
}
ds.close();
}catch(IOException e){
e.printStackTrace();
System.out.println("Request failed!");
}
return response;
}
}
结果验证:
相关推荐
本文将深入探讨如何使用Java实现HTTP文件上传,同时基于提供的压缩包资源,我们将详细介绍相关代码和类库。 首先,了解HTTP文件上传的基本原理。在HTTP中,文件上传通常使用POST方法,通过表单数据或者Multipart/...
在测试类中,可能还会使用Java的`HttpURLConnection`或第三方库如Apache HttpClient来模拟文件上传。 在部署这个DEMO时,你需要确保有Tomcat服务器环境,并将项目结构配置正确。项目中的`web.xml`文件应配置Jersey...
【标题】:基于Java实现的百度网盘模拟系统 在当今信息化时代,网盘服务已经成为存储和分享数据的重要工具。本项目旨在通过Java技术栈,模拟实现一个类似于百度网盘的客户端/服务器(C/S)架构系统,为用户提供多...
对于文件上传,Java通常会使用HttpURLConnection或者Apache HttpClient库来处理HTTP请求,而在服务器端,可能使用Spring Framework的MultipartFile接口来接收并处理上传的文件。文件上传可能涉及到的细节包括:文件...
另外,如果项目中包含了文件传输功能,那么可能还需要用到Java的文件操作API和流的组合,以实现文件的上传和下载。 总的来说,JavaMSN实例展示了Java在网络编程、协议解析、XML处理和多线程方面的应用。通过这个...
在实际项目中,你可能需要根据curl命令的具体参数和行为来调整这个代码,比如处理POST请求、上传文件、设置认证等。 由于提供的文件列表只有一个`curljava`,可能是源代码、文档或者其他资源。如果你能提供更多的...
WebService是一种基于HTTP协议的、平台无关的通信方式,它允许不同系统间的应用程序通过网络共享数据和功能。常见的WebService规范有SOAP(Simple Object Access Protocol)和REST(Representational State Transfer...
7. **文件上传与下载**:文件传输可能通过HTTP的POST和GET方法实现,Java的HttpURLConnection或者第三方库如Apache HttpClient可以用来处理这些网络请求。 8. **文件分块上传与断点续传**:为了处理大文件,源码...
与HttpGet不同,HttpPost可以传输大量数据,包括文件上传,且数据不会显示在URL上,因此对于敏感信息的传递更为安全。在Java中,我们可以使用HttpURLConnection或者HttpClient库来实现HttpPost请求,通常需要设置...
- **HTTP/HTTPS协议**:云盘和网盘服务通常基于HTTP或更安全的HTTPS进行通信,用于上传、下载文件。 - **RESTful API**:应用通过调用云服务商提供的RESTful接口实现文件操作。 - **JSON数据交换格式**:用于传输...
Java Socket是Java编程语言中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的网络连接功能。Socket在Java中被广泛用于构建客户端-服务器应用,例如创建Web服务器、聊天应用程序、文件传输等。以下是...
- **HttpURLConnection**:Java标准库中的`HttpURLConnection`类用于实现HTTP协议,可以进行GET、POST等操作。 - **HttpClient**:Apache HttpClient库提供了更高级的HTTP客户端功能,支持更多HTTP特性。 4. **...
6. **HTTP协议**:讲解基于HTTP协议的网络应用开发,如使用HttpURLConnection或HttpClient类。 7. **网络安全**:讨论SSL/TLS加密,身份验证和授权,以及网络安全的最佳实践。 其次,"NetProject.rar"可能是包含...
文件上传通常基于HTTP协议,尤其是POST方法。POST请求用于向服务器发送数据,例如文件内容。理解HTTP头、状态码以及请求体的构造对于实现文件上传至关重要。 3. **Multipart/form-data**: 由于文件上传涉及到二...
10. **匿名FTP下载**:利用`java.net.FTPClient`类实现文件的上传和下载功能。 11. **Socket通信**:掌握Socket编程的基本原理,实现客户端与服务器之间的低级网络通信。 12. **远程方法调用(RMI)**:Java的RMI...
10. **多部分请求**:对于上传文件或发送复杂数据,HTTP允许使用多部分请求(multipart/form-data),Java API提供了相应支持。 11. **WebSocket**:虽然不是HTTP,但WebSocket是一种在单个TCP连接上进行全双工通信...
4. **HTTP请求与响应**:模拟浏览器发送GET/POST请求,解析HTTP响应,理解HTTP协议的头部和状态码。 5. **文件上传与下载**:通过FTP或HTTP实现文件在客户端和服务器之间的传输。 6. **网络安全**:学习如何使用SSL/...
【Android 仿新浪微博】项目是基于Android平台的一个开源项目,其目标是实现一个类似新浪微博的应用。这个项目对于学习Android开发,尤其是社交应用的构建,提供了丰富的实践参考。 首先,项目的核心在于用户界面...
- **Android SDK**:项目基于Android SDK进行开发,这是Android应用的基础,提供了API接口,开发者可以调用这些接口来实现各种功能。 - **UI设计**:使用XML布局文件设计界面,包括登录/注册页面、主页面、发布...
在ShareList中,这些技术用于读取、保存和传输用户上传的文件。 5. **网络编程**:如果ShareList支持网络分享,那么Socket编程和HTTP协议将扮演重要角色。Java的Socket类和HttpURLConnection类可以用来实现客户端-...