package com.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.util.EncodingUtil;
/**
* 远程上传文件
*
* @author Administrator
*
*/
public class RemoteFileUpload {
private String uploadURL;
public String getUploadURL() {
return uploadURL;
}
public RemoteFileUpload() {
super();
}
/**
*
* @param uploadURL
* 上传项目的地址
*/
public RemoteFileUpload(String uploadURL) {
super();
this.setUploadURL(uploadURL);
}
public void setUploadURL(String uploadURL) {
this.uploadURL = uploadURL;
}
/**
* 上传文件
*
* @param targetFile
* 要上传的文件
* @return 上传是否成功
*/
public Boolean remoteFileUpload(File targetFile) {
return this.remoteFileUpload(targetFile, getUploadURL());
}
/**
* 上传文件
*
* @param targetFile
* 要上传的文件
* @param uploadURL
* 上传项目的地址
* @return 上传是否成功
*/
public Boolean remoteFileUpload(File targetFile, String uploadURL) {
Boolean isUploadSuc = false;
// PostMethod filePost = new PostMethod(uploadURL +
// "/RemoteFileUpload");
PostMethod filePost = new PostMethod(uploadURL ) {
// 这个用来中文乱码
public String getRequestCharSet() {
return "UTF-8";
}
};
try {
// 通过以下方法可以模拟页面参数提交
// filePost.setParameter("name", "中文");
// filePost.setParameter("pass", "1234");
Part[] parts = { new CustomFilePart(targetFile.getName(),
targetFile) };
filePost.setRequestEntity(new MultipartRequestEntity(parts,
filePost.getParams()));
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(5000);
int status = client.executeMethod(filePost);
if (status == HttpStatus.SC_OK) {
String responseBodyAsString = filePost
.getResponseBodyAsString();
// System.out.println(responseBodyAsString);
if ("fileNullError".equals(responseBodyAsString)) {
System.out.println("上传失败,上传文件名为空!");
isUploadSuc = false;
} else if ("fileFormatError".equals(responseBodyAsString)) {
System.out.println("上传失败,上传文件名格式错误!");
isUploadSuc = false;
} else if ("success".equals(responseBodyAsString)) {
System.out.println("上传成功");
isUploadSuc = true;
}
// 上传成功
} else {
System.out.println("上传失败");
isUploadSuc = false;
// 上传失败
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
filePost.releaseConnection();
}
return isUploadSuc;
}
}
/**
* 解决中文文件名乱码
*/
class CustomFilePart extends FilePart {
public CustomFilePart(String filename, File file)
throws FileNotFoundException {
super(filename, file);
}
protected void sendDispositionHeader(OutputStream out) throws IOException {
super.sendDispositionHeader(out);
String filename = getSource().getFileName();
if (filename != null) {
out.write(EncodingUtil.getAsciiBytes(FILE_NAME));
out.write(QUOTE_BYTES);
out.write(EncodingUtil.getBytes(filename, "utf-8"));
out.write(QUOTE_BYTES);
}
}
}
//测试类
package com.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
/**
* test1
*/
// RemoteFileUpload fileUpload = new RemoteFileUpload(远程方法);
// Boolean a = fileUpload.remoteFileUpload(new File(文件名));
/**
* test2
*/
RemoteFileUpload fileUpload = new RemoteFileUpload();
Boolean a = fileUpload.remoteFileUpload(new File((文件名),远程方法);
System.out.println(a);
}
}
例子中的远程方法需要在WEB.XML文件中注册,httpClient模仿的就是浏览器端
浙公网安备 33010602011771号