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了
呵呵 希望可以帮助到你
服务器端写个servlet,然后在doPost()方法里处理客户端上传的文件,大概代码:
DiskFileItemFactory
factory
=
new
DiskFileItemFactory();
factorysetSizeThreshold(1024
1024);
//
设置最多只允许在内存中存储的数据,
单位:字节
factorysetRepository(cachepath);
//
设置一旦文件大小超过设定值时数据存放的目录
ServletFileUpload
srvFileUpload
=
new
ServletFileUpload(factory);
srvFileUploadsetSizeMax(1024
1024
1024);
//
设置允许用户上传文件大小,
单位:字节
//
开始读取上传信息
List
fileItems
=
null;
try
{
fileItems
=
srvFileUploadparseRequest(request);
}
catch
(Exception
e)
{
Systemoutprintln("获取上传信息。。。。。。失败");
}
//
依次处理每个上传的文件
Iterator
iter
=
fileItemsiterator();
while
(iterhasNext())
{
FileItem
item
=
(FileItem)
iternext();
//
忽略其他不是文件域的所有表单信息
if
(!itemisFormField())
{
//
取出文件域的所有表单信息
}
else
{
//
取出不是文件域的所有表单信息
}
}
/
文件上传处理主程序。
@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;
}
既然考虑到 安全问题,那么在客户端实现确实是不安全的。
在服务器端实现很简单呀
首先,保存文件的过程估计你已经写好了,那么文件名等信息应该也获取到了。
服务器端实现连接自己的数据库,然后执行sql就好了呀。
当然还有一种实现,就是由客户端拼sql,当作一个字符串传给服务器端,由服务器端去执行。几乎所有的界面化数据库连接工具都是这样做的,主要是因为sql是人现场录入的。
0条评论