android客户端上传文件 至java服务器,服务器在tomcat中保存,求代码
服务器端写个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
{
//
取出不是文件域的所有表单信息
}
}
文件上传到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了
呵呵 希望可以帮助到你
1、获取服务器指定目录路径path
2、复制文件
参考代码
String dir = "/a/b/c/";String path = requestgetSession()getServletContext()getRealPath(dir)+"\\"+filegetOriginalFilename();
//path 为服务器在硬盘的绝对路径 如H:\tomcat\webapps\youproject\a\b\c\文件名txt
File newFile=new File(path);
filetransferTo(newFile); //复制文件
如果服务器开通了ftp服务,你的客户端可以实现一个ftp的客户端,通过ftp服务将文件上传到服务器的指定目录下,可以使用orgapachecommonsnetftpFTPClient这个类去实现,非常的简单,网上有很多现成的代码可以用
一般linux下传输文件到windows,直接用发ftp就行
,具体操作1、在windows下,点开始按钮,选:运行,进入DOS
2、在dos下面输入ftp
19216811(liunx服务器IP地址)然后提示输入,用户名,密码
进入linux服务器的FTP>界面,此时输入binary(binary是安全传输方式)
3、此时输入cd
/usr(用cd命令切换到相应传输目录)
4输入
get
find
(要传输的文件)
搞定
String realpath = ServletActionContextgetServletContext()getRealPath("/upload") ;//获取服务器路径
String[] targetFileName = uploadFileName;
for (int i = 0; i < uploadlength; i++) {
File target = new File(realpath, targetFileName[i]);
FileUtilscopyFile(upload[i], target);
//这是一个文件复制类copyFile()里面就是IO操作,如果你不用这个类也可以自己写一个IO复制文件的类
}
其中private File[] upload;// 实际上传文件
private String[] uploadContentType; // 文件的内容类型
private String[] uploadFileName; // 上传文件名
这三个参数必须这样命名,因为文件上传控件默认是封装了这3个参数的,且在action里面他们应有get,set方法!
上传文件时,需要给SmartUpload传一个上传文件的保存地址,一般都用一个String来表示,使用request来获得。比如,你要把文件保存在项目路径下的upload文件夹,刚:
String
path
=
requestgetRealPath("upload");//获取upload文
//夹的绝对路径。
//得到:c://项目名/upload/
然后再拼上你的文件名,比如你上传一个叫testtxt的文件,则全部的URL为:
path
+
fileName
=
"c:///项目名/upload/"+"texttxt";
在实际的编程中,其实数据库只需要保存fileName就可以了,path作为配置,每次系统加载时再去读取,这样做的好处是:系统的环境变化时,只需要修改配置文件就能够搞定,而且不会重复保存多余的路径(因为路径都是一样的)
0条评论