JAVA 把文件传到服务器.......
文件上传到A以后 放到服务器上面 然后他就有一个绝对的访问路径 也就是对应一个绝对的url 这样就好办了
Java提供了对URL访问和大量的流操作的的API,可以很容易的完成对网络上资源的存取,下面的代码段就完成了对一个网站的资源进行访问:
destUrl="http://wwwyourwebcom/java/Afilezip";
//假设你把文件放到webroot底下的java文件里面
url = new URL(destUrl);
httpUrl = (HttpURLConnection) urlopenConnection();
//连接指定的网络资源
httpUrlconnect();
//获取网络输入流
bis = new BufferedInputStream(httpUrlgetInputStream());
得到流后下面你自己想怎么操作就怎么操作了
对于怎么得到资源的连接地址这个方法很多 你可以专门提供一个Servlet 获取到输出的流后 Responsewrite转门提供服务器已上传的文件 文件名可以一天位单位返回
客户端用与上面同样的方法得到文件名后 拆分 然后再继续循环调用上面的方法 下载文件就ok了
呵呵 希望可以帮助到你
可以通过ftp的方式上传到指定服务器
希望我团的答案能给您一定的帮助~祝您早日解决问题~!
soso
~你敢告诉我,我的回答哪不符合规定了么??不告诉我原因我怎么改???
给一种方式做参考,我这边类似。是将A作为客户端,上传文件到服务器B,服务器B以struts接受请求做处理。使用httpclient。
/将文件上传到服务端,并接收其返回信息
@param client DefaultHttpClient
@param url 服务器url:如:http://localhost:8080/test/uploadaction
@param filePath 文件路径
@param params 上传参数
@param encode 编码集,主要用来解析返回的response中的信息
@return 解析出的返回信息,如服务器那边的成功提示:“success”
/
public static String sendHttpClientPostToUpload(DefaultHttpClient client, String url, String filePath,
Map<String, String> params, String encode){
MultipartEntity mpEntity = new MultipartEntity();
if (params != null && !paramsisEmpty()) {
for (MapEntry<String, String> entry : paramsentrySet()) {
// 参数名
StringBody par;
try {
par = new StringBody(entrygetValue()toString());
mpEntityaddPart(entrygetKey(), par);
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
}
}
}
//
if (!filePathequals("")) {
FileBody file = new FileBody(new File(filePath));
mpEntityaddPart("file", file);
}
// 使用HttpPost对象设置发送的URL路径
HttpPost post = new HttpPost(url);
postsetEntity(mpEntity);
// 创建一个浏览器对象,以把POST对象向服务器发送,并返回响应消息
try {
HttpResponse response = clientexecute(post);
if (responsegetStatusLine()getStatusCode() == HttpStatusSC_OK) {
// 封装了服务器端返回的数据
HttpEntity responseEntity = responsegetEntity();
//这里是对服务器返回的session进行记录的操作,以获取sessionId
// CookieStore mCookieStore = ((DefaultHttpClient) client)getCookieStore();
// List<Cookie> cookies = mCookieStoregetCookies();
// for (int i = 0; i < cookiessize(); i++) {
// // 如果cookies头和"JSESSIONID" 就记录sessionID
// if ("JSESSIONID"equals(cookiesget(i)getName())) {
// String sessionId = cookiesget(i)getValue();
// break;
// }
// }
//完成
InputStream is = responseEntitygetContent();
return changeInputStream(responseEntitygetContent(), encode);
}
} catch (ClientProtocolException e) {
eprintStackTrace();
} catch (IOException e) {
eprintStackTrace();
}
return "";
}/
@param inputStream
@param encode
@return
/
private static String changeInputStream(InputStream inputStream,
String encode) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int len = 0;
byte[] date = new byte[1024];
String result = "";
try {
while ((len = inputStreamread(date)) != -1) {
outputStreamwrite(date, 0, len);
}
result = new String(outputStreamtoByteArray(), encode);
return result;
} catch (IOException e) {
eprintStackTrace();
}
return null;
}
需要的参数client,new 一个就可以了。
DefaultHttpClient client = new DefaultHttpClient();类似参考网上有很多,不过大都是你转载他得,他转载你的,能用的不多。
使用Socket可以做到,不过直接编程一般都是在局域网内,如果要在不同局域网间通信,需要使用一台有公网IP的服务器,可以电脑A和电脑B同时连接服务器,然后A向服务器传递文件,服务器再将文件转发电脑B。也可以使用打洞的方式使A、B互联,此时服务器的作用是辅助打洞。A、B向服务器发送信息后socket不要关闭(假设使用10989端口),同时使用Serversocket绑定监听相同的端口(监听10989端口)。在java中有参数可以做到,具体方法请自行百度。服务器获取到A、B的外网地址和端口,将A的外网地址信息发送给B、将B的外网地址信息发送给A。然后使用A没有关闭的Socket向B发送一组信息(此时连接会失败,但是B的路由表上已经记录了A的信息),发送后A向服务器发送消息,服务器告诉B A已经发送消息。然后B使用未关闭的socket向A发送消息,就和A上监听的ServerSocket取得连接了。之后就可以互相传递数据。
0条评论