java文件上传到服务器的问题
可以通过ftp的方式上传到指定服务器
希望我团的答案能给您一定的帮助~祝您早日解决问题~!
soso
~你敢告诉我,我的回答哪不符合规定了么??不告诉我原因我怎么改???
服务器端,做一个FTP,客户端使用APACHE的FTP组件上传。。。。。。。
或
服务器端实现HTTP的POST接收,,,,,客户端使用httpclient组件post上去
如果服务器开通了ftp服务,你的客户端可以实现一个ftp的客户端,通过ftp服务将文件上传到服务器的指定目录下,可以使用orgapachecommonsnetftpFTPClient这个类去实现,非常的简单,网上有很多现成的代码可以用
/
文件上传处理主程序。
@return int 操作结果 0 文件操作成功;1 request对象不存在。 2 没有设定文件保存路径或者文件保存路径不正确;3
没有设定正确的enctype;4 文件操作异常。
/
public Map<String, String> fileupload_java(HttpServletRequest request,String uploadpath) {
Map<String, String> param = new HashMap<String, String>();
try {
// 参数或者文件名
String name = null;
// 参数的value
String value = null;
// 读取的流是否为文件的标志位
boolean fileFlag = false;
// 要存储的文件。
File tmpFile = null;
// 上传的文件的名字
String fName = null;
FileOutputStream baos = null;
BufferedOutputStream bos = null;
int rtnPos = 0;
byte[] buffs = new byte[BUFSIZE 8];
// 取得ContentType
String contentType = requestgetContentType();
int index = contentTypeindexOf("boundary=");
String boundary = "--" + contentTypesubstring(index + 9);
String endBoundary = boundary + "--";
// 从request对象中取得流。
ServletInputStream sis = requestgetInputStream();
// 读取1行
while ((rtnPos = sisreadLine(buffs, 0, buffslength)) != -1) {
String strBuff = new String(buffs, 0, rtnPos);
if (strBuffstartsWith(boundary)) {
if (name != null && nametrim()length() > 0) {
if (fileFlag) {
bosflush();
baosclose();
bosclose();
baos = null;
bos = null;
paramput(name, tmpFilegetAbsolutePath());
} else {
String paramValue = paramget(name);
paramValue += ","+ value;
paramput(name, paramValue);
}
}
name = new String();
value = new String();
fileFlag = false;
fName = new String();
rtnPos = sisreadLine(buffs, 0, buffslength);
if (rtnPos != -1) {
strBuff = new String(buffs, 0, rtnPos);
if (strBufftoLowerCase()startsWith("content-disposition: form-data; ")) {
int nIndex = strBufftoLowerCase()indexOf("name=\"");
int nLastIndex = strBufftoLowerCase()indexOf("\"", nIndex + 6);
name = strBuffsubstring(nIndex + 6, nLastIndex);
}
int fIndex = strBufftoLowerCase()indexOf("filename=\"");
if (fIndex != -1) {
fileFlag = true;
int fLastIndex = strBufftoLowerCase()indexOf("\"", fIndex + 10);
// fName = strBuffsubstring(fIndex + 10, fLastIndex);
fName = new String(strBuffsubstring(fIndex + 10, fLastIndex)getBytes(),"gbk");
fName = FileLgetFileNameWithoutSeprater(fName);
if (fName == null || fNametrim()length() == 0) {
fileFlag = false;
sisreadLine(buffs, 0, buffslength);
sisreadLine(buffs, 0, buffslength);
sisreadLine(buffs, 0, buffslength);
continue;
}else{
fName = FileLgetFileNameTime(fName);
sisreadLine(buffs, 0, buffslength);
sisreadLine(buffs, 0, buffslength);
}
}
}
} else if (strBuffstartsWith(endBoundary)) {
if (name != null && nametrim()length() > 0) {
if (fileFlag) {
bosflush();
baosclose();
bosclose();
baos = null;
bos = null;
paramput(name, tmpFilegetAbsolutePath());
} else {
String paramValue = paramget(name);
paramValue += ","+ value;
paramput(name, paramValue);
}
}
} else {
if (fileFlag) {
if (baos == null && bos == null) {
tmpFile = new File(uploadpath + fName);
baos = new FileOutputStream(tmpFile);
bos = new BufferedOutputStream(baos);
}
boswrite(buffs, 0, rtnPos);
baosflush();
} else {
value = value + strBuff;
}
}
}
} catch (IOException e) {
eprintStackTrace();
}
return param;
}
文件上传到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了
呵呵 希望可以帮助到你
0条评论