平时我们传文件,一般都是通过FTP方式,这是最常用的。偶尔也会用到利用共享目录方式传文件,在我以前的文章中有提供如何借助共享目录传文件。今天我们要说的是通过HTTP方式传文件,首先在接收方需要有一个接收的接口类,用以在触发上传文件后接收文件。下面我们给出HTTP上传类的实例代码
public static int upload(String strURL, File[] allFile) {
int status = 200;
for (int i = 0; i < allFile.length; ++i) {
String localFile = allFile[i].getAbsolutePath();
if (!(allFile[i].exists())) {
continue;
}
long startPos = 0L;
HttpClient headclient = new DefaultHttpClient();
HttpHead httphead = new HttpHead(strURL);
try {
httphead.addHeader("Content-Type", "application/octet-stream");
} catch (Exception e) {
e.printStackTrace();
} finally {
headclient.getConnectionManager().shutdown();
}
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL(strURL).openConnection();
RandomAccessFile fis = new RandomAccessFile(new File(localFile), "r");
if (startPos < fis.length()) {
conn.setRequestMethod("PUT");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-Type", "application/octet-stream");
conn.setRequestProperty("File-Name", allFile[i].getName());
OutputStream os = conn.getOutputStream();
int rn = 0;
byte[] buf = new byte[4096];
while ((rn = fis.read(buf, 0, 4096)) > 0) {
os.write(buf, 0, rn);
}
os.close();
status = conn.getResponseCode();
}
fis.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
try {
conn.getResponseCode();
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
return status;
}
亲测,可以直接能用的java上传类(HTTP方式)。HTTP上传对于一些小文件是可以,对于一些大文件,因这种协议容易中断,因此必须考虑断点续传,这里我们没有把断点续传考虑进去,不然就太复杂了。