您的位置:首页 > 理论基础 > 计算机网络

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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  web javase http文件
相关文章推荐