您的位置:首页 > 编程语言 > Java开发

文件的下载与上传

2016-07-17 00:21 351 查看

文件的下载与上传

一、文件下载

文件下载的例子在我们周围很常见,这里用java代码实现一个文件下载的例子。

1.想要下载某个文件,我们需要知道资源的路径。

//文件资源的地址
String path ="http://localhost:8080/hello/info.txt";
//将地址转化为url
URL url =new URL(path);


2.利用这个url打开一个远程链接,然后获取响应码。

//打开链接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//获得响应码
int code = connection.getResponseCode();


这里我们还可以设置range,来实现对文件部分下载的功能。如果设了range,我们在获取请求码时就不能用200,而应该用206.

connection.addRequestProperty("range", "bytes:-1000");


3.获取到响应码之后,开始读取数据,然后将数据写到本地

if(code == 206){
InputStream is = connection.getInputStream();
FileOutputStream fos =new FileOutputStream("info.txt");
int length=0;
byte[] buff=new byte[1024];
while((length=is.read(buff))!=-1){
fos.write(buff, 0, length);
}
is.close();
fos.close();
System.out.println("下载完成");
}


二、文件上传

这里我们采用apache fileupload第三方框架的方式将文件上传。

导入相应的架包。commons-fileupload-1.2.2.jar,commons-io-2.0.1.jar

构建磁盘文件工厂。

//1.构建磁盘文件工厂
DiskFileItemFactory factory =new DiskFileItemFactory();


通过文件工厂获取一个文件上传的核心类

//2.通过文件工厂获取一个文件上传的核心类
ServletFileUpload fileUpload =new ServletFileUpload(factory);


解析request,返回List

try {
List<FileItem> fileItems = fileUpload.parseRequest(request);
//循环取出每个fileItem
for (FileItem fileItem : fileItems) {
if(fileItem.isFormField()){
//是普通项
String fieldName =fileItem.getFieldName();
String name =fileItem.getString();
System.out.println(fieldName+"   "+name);
}else{
//文件上传项
String name =fileItem.getName();//文件名
InputStream is = fileItem.getInputStream();
FileOutputStream fos =new FileOutputStream("i:\\"+name);
int length=0;
byte[]buff=new byte[1024];
while((length=is.read(buff))!=-1){
fos.write(buff, 0, length);
}
is.close();
fos.close();

}
}


这里我们就基本上将上传的功能完成了。然后我们还可以将功能完善一下。当上传的文件过大是,我们可以设置缓存。

//添加缓存
factory.setSizeThreshold(1024*1024);
//获取绝对路径
String realPath =getServletContext().getRealPath("temp");
factory.setRepository(new File(realPath));


这里我们需要先在项目的工作区间里创建一个temp文件夹。然后我们还需要在关闭了流资源之后,将这些缓存文件删掉。

fileItem.delete();


最后还两个小问题,也是很重要的问题。

(1).个就是我们在将数据提交到servlet的时候,我们的表单必须是以post请求提交数据,而且还要添加一个属性enctype。

<form action="/fileDown/MyServlet" method="post" enctype="multipart/form-data">


(2).如果文件名中有中文,我们不进行处理的话,就会出现乱码的问题,所以我们在得到核心类后进行编码设置。

fileUpload.setHeaderEncoding("UTF-8");


OK,搞定!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 上传与下载