操作方式如下(两台电脑,扮演客户端和服务端):
客户端这里打开IE服务端地址,进入文件上传页面,表单信息是:
<form name="form1" enctype="multipart/form-data" method="post">
<input type="file" name="orig_file" maxLength="20" >
</form>
这里贴出服务端ACTION里解析页面获取的上传文件信息,用的是APACHE组件 private int upload(HttpServletRequest request) throws Exception { DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);// 创建
// ServletFileUpload
// 对象,构造的时候传一个
// DiskFileItemFactory
// 对象进去
upload.setHeaderEncoding("gb2312");// 设置普通字段名称和文件字段的文件名所采用的字符集编码
List list = null;
try {
list = upload.parseRequest(request);// 解析 request 对象 得到一个包含
// FileItem 对象的 list
} catch (FileUploadException e) {
// out.print("解析文件时出现问题:");
e.printStackTrace();
return 0;
} String path = "";
try {
path = request.getSession().getServletContext().getRealPath("/xls");
} catch (RuntimeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return 0;
} Iterator it = list.iterator();// 遍历list
while (it.hasNext()) {
FileItem fi = (FileItem) it.next();// 类型转换 if (fi.isFormField()) {// 判断该 FileItem 对象是否是一个普通表单类型
String name = fi.getFieldName();// 得到普通表单类型的表单名
String content = fi.getString("GB2312");// 用指定编码得到普通表单的值
request.setAttribute(name, content);// 把键值放入 request 对象
} else {
try {
// 得到文件表单的值,就是用户本地的文件路径径
String pathStr = fi.getName(); // 如果文件表单为空,则不处理
if (pathStr.trim().equals("")) {
continue;
} int start = pathStr.lastIndexOf("\\");// 得到文件名在路径中的位置
String fileName = pathStr.substring(start + 1);// 得到文件名 File pathDest = new File(path, fileName);// 创建上传上来的文件对象
// 由服务器上存放文件的路径
// + 文件名 组成 fi.write(pathDest);// 写文件 String name = fi.getFieldName();// 得到文件表单的名称
request.setAttribute(name, fileName);// 把表单名、文件名放入
// request } catch (Exception e) {
// out.print("存储文件错误:");
e.printStackTrace();
return 0;
} finally {// 立即删除保存表单字段内容的临时文件
fi.delete();
}
}
} return 1;
}现象说明,客户端有一个文件为D:/aa.txt,通过页面上传到服务器上时,服务端报错D:/aa.txt找不到,也就是说服务端检测到自己机器里的路径,没有获取客户端传上来的文件的流信息。我可以保证,这段代码在本机调试是成功的,也就是本机同时扮演服务器和客户端角色时候,是成功的。请大家指教一下,我改怎么做,才能完成两台甚至是多台机器文件传输操作。谢谢大家乐
客户端这里打开IE服务端地址,进入文件上传页面,表单信息是:
<form name="form1" enctype="multipart/form-data" method="post">
<input type="file" name="orig_file" maxLength="20" >
</form>
这里贴出服务端ACTION里解析页面获取的上传文件信息,用的是APACHE组件 private int upload(HttpServletRequest request) throws Exception { DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);// 创建
// ServletFileUpload
// 对象,构造的时候传一个
// DiskFileItemFactory
// 对象进去
upload.setHeaderEncoding("gb2312");// 设置普通字段名称和文件字段的文件名所采用的字符集编码
List list = null;
try {
list = upload.parseRequest(request);// 解析 request 对象 得到一个包含
// FileItem 对象的 list
} catch (FileUploadException e) {
// out.print("解析文件时出现问题:");
e.printStackTrace();
return 0;
} String path = "";
try {
path = request.getSession().getServletContext().getRealPath("/xls");
} catch (RuntimeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return 0;
} Iterator it = list.iterator();// 遍历list
while (it.hasNext()) {
FileItem fi = (FileItem) it.next();// 类型转换 if (fi.isFormField()) {// 判断该 FileItem 对象是否是一个普通表单类型
String name = fi.getFieldName();// 得到普通表单类型的表单名
String content = fi.getString("GB2312");// 用指定编码得到普通表单的值
request.setAttribute(name, content);// 把键值放入 request 对象
} else {
try {
// 得到文件表单的值,就是用户本地的文件路径径
String pathStr = fi.getName(); // 如果文件表单为空,则不处理
if (pathStr.trim().equals("")) {
continue;
} int start = pathStr.lastIndexOf("\\");// 得到文件名在路径中的位置
String fileName = pathStr.substring(start + 1);// 得到文件名 File pathDest = new File(path, fileName);// 创建上传上来的文件对象
// 由服务器上存放文件的路径
// + 文件名 组成 fi.write(pathDest);// 写文件 String name = fi.getFieldName();// 得到文件表单的名称
request.setAttribute(name, fileName);// 把表单名、文件名放入
// request } catch (Exception e) {
// out.print("存储文件错误:");
e.printStackTrace();
return 0;
} finally {// 立即删除保存表单字段内容的临时文件
fi.delete();
}
}
} return 1;
}现象说明,客户端有一个文件为D:/aa.txt,通过页面上传到服务器上时,服务端报错D:/aa.txt找不到,也就是说服务端检测到自己机器里的路径,没有获取客户端传上来的文件的流信息。我可以保证,这段代码在本机调试是成功的,也就是本机同时扮演服务器和客户端角色时候,是成功的。请大家指教一下,我改怎么做,才能完成两台甚至是多台机器文件传输操作。谢谢大家乐
String fileName = pathStr.substring(start + 1);// 得到文件名 File pathDest = new File(path, fileName);// 创建上传上来的文件对象
// 由服务器上存放文件的路径
// + 文件名 组成 fi.write(pathDest);// 写文件 哪有你这样保存文件的唉?File uploadedFile = new File(...);
fi.write(uploadedFile);