java se模仿http向web服务器上传文件
2014-01-13 16:56
253 查看
主要使用的类:
URL HttpURLConnection
源代码:
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class UploadFile {
public static String post(String actionUrl, String FileName) throws IOException {
// 产生随机分隔内容
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
// 定义 URL 实例
URL uri = new URL(actionUrl);
// 定义 HttpURLConnection 实例,打开连接
HttpURLConnection conn = (HttpURLConnection)uri.openConnection();
// 设置从主机读取数据超时(单位:毫秒)
conn.setReadTimeout(5 * 1000);
// 设置允许输入
conn.setDoInput(true);
// 设置允许输出
conn.setDoOutput(true);
// 设置不允许使用缓存
conn.setUseCaches(false);
// 设置为 POST 发送方法
conn.setRequestMethod("POST");
// 设置维持长连接
conn.setRequestProperty("connection", "keep-alive");
// 设置文件字符集为 UTF-8
conn.setRequestProperty("Charsert", "UTF-8");
// 设置文件类型
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
// 创建一个新的数据输出流,将数据写入指定基础输出流
DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
// 发送文件数据
if (FileName != "") {
// 定义 StringBuilder 对象,构建发送字符串数据
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data;name=\"file1\"; filename=\"\"+ 测试文件.txt + \"\""+ LINEND);
sb1.append("Content-Type: application/octet-stream; charset="+
CHARSET + LINEND);
sb1.append(LINEND);
// 写入输出流中
outStream.write(sb1.toString().getBytes());
// 将文件读到输入流中
InputStream is = new FileInputStream(FileName);
byte[] buffer = new byte[1024];
int len = 0;
// 写入输出流中
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
// 关闭输入流
is.close();
// 添加换行标志
outStream.write(LINEND.getBytes());
}
// 请求结束标志
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
outStream.write(end_data);
// 刷新,发送数据
outStream.flush();
// 得到响应码
int res = conn.getResponseCode();
InputStream in = null;
// 上传成功则会返回响应码 200
if (res == 200) {
// 读取数据
in = conn.getInputStream();
int ch;
// 定义 StringBuilder 字符串
StringBuilder sb2 = new StringBuilder();
// 保存数据
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
}
// 如果数据不为空,则以字符串方式返回数据;否则返回 null
return in == null ? null : in.toString();
}
public static void main(String[] args) {
String url = "http://127.0.0.1:8888/java_upload_file_server/upload.do";
String fileName = "e:\\测试文档.txt";
try {
post(url, fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
URL HttpURLConnection
源代码:
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class UploadFile {
public static String post(String actionUrl, String FileName) throws IOException {
// 产生随机分隔内容
String BOUNDARY = java.util.UUID.randomUUID().toString();
String PREFIX = "--", LINEND = "\r\n";
String MULTIPART_FROM_DATA = "multipart/form-data";
String CHARSET = "UTF-8";
// 定义 URL 实例
URL uri = new URL(actionUrl);
// 定义 HttpURLConnection 实例,打开连接
HttpURLConnection conn = (HttpURLConnection)uri.openConnection();
// 设置从主机读取数据超时(单位:毫秒)
conn.setReadTimeout(5 * 1000);
// 设置允许输入
conn.setDoInput(true);
// 设置允许输出
conn.setDoOutput(true);
// 设置不允许使用缓存
conn.setUseCaches(false);
// 设置为 POST 发送方法
conn.setRequestMethod("POST");
// 设置维持长连接
conn.setRequestProperty("connection", "keep-alive");
// 设置文件字符集为 UTF-8
conn.setRequestProperty("Charsert", "UTF-8");
// 设置文件类型
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY);
// 创建一个新的数据输出流,将数据写入指定基础输出流
DataOutputStream outStream = new DataOutputStream(conn.getOutputStream());
// 发送文件数据
if (FileName != "") {
// 定义 StringBuilder 对象,构建发送字符串数据
StringBuilder sb1 = new StringBuilder();
sb1.append(PREFIX);
sb1.append(BOUNDARY);
sb1.append(LINEND);
sb1.append("Content-Disposition: form-data;name=\"file1\"; filename=\"\"+ 测试文件.txt + \"\""+ LINEND);
sb1.append("Content-Type: application/octet-stream; charset="+
CHARSET + LINEND);
sb1.append(LINEND);
// 写入输出流中
outStream.write(sb1.toString().getBytes());
// 将文件读到输入流中
InputStream is = new FileInputStream(FileName);
byte[] buffer = new byte[1024];
int len = 0;
// 写入输出流中
while ((len = is.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
// 关闭输入流
is.close();
// 添加换行标志
outStream.write(LINEND.getBytes());
}
// 请求结束标志
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
outStream.write(end_data);
// 刷新,发送数据
outStream.flush();
// 得到响应码
int res = conn.getResponseCode();
InputStream in = null;
// 上传成功则会返回响应码 200
if (res == 200) {
// 读取数据
in = conn.getInputStream();
int ch;
// 定义 StringBuilder 字符串
StringBuilder sb2 = new StringBuilder();
// 保存数据
while ((ch = in.read()) != -1) {
sb2.append((char) ch);
}
}
// 如果数据不为空,则以字符串方式返回数据;否则返回 null
return in == null ? null : in.toString();
}
public static void main(String[] args) {
String url = "http://127.0.0.1:8888/java_upload_file_server/upload.do";
String fileName = "e:\\测试文档.txt";
try {
post(url, fileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
相关文章推荐
- 用HttpListener做web服务器,简单解析post方式过来的参数、上传的文件
- http文件上传到web服务器,上传到ftp服务器
- HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大
- asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- WinForm中文件上传服务器:HttpWebRequest
- 通过POST向WEB服务器发送数据/上传文件(HttpSendRequestEx、InternetWriteFile)
- 用HttpListener 建立web服务器 实现网页浏览、文件上传
- HTTP上传文件到WEB服务器
- 用HttpListener做web服务器,简单解析post方式过来的参数、上传的文件
- (总结3)WinForm中文件上传服务器:HttpWebRequest .
- Java客户端通过Http发送POST请求上传文件到web服务器
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- 将本地文件上传到指定的服务器(HttpWebRequest方法)
- (总结3)WinForm中文件上传服务器:HttpWebRequest
- Java客户端通过Http发送POST请求上传文件到web服务器
- vc 利用http 上传文件到web 的请求头内容
- javaweb上传文件到服务器中
- C#在WinForm下使用HttpWebRequest上传文件并显示进度
- cocos Httpclient 上传文件到服务器
- javaweb HttpServlet上传文件功能代码