java 从服务器下载文件并保存到本地

struts2 同时被 2 个专栏收录
4 篇文章 0 订阅
1 篇文章 0 订阅

最近在做项目,做到文件的下载,假设公司有文件服务器(像ftp或者其他),像开发人员怎么进行从文件服务器上下载文件到本地指定目录下!又或者需要从网上下载资源到本地指定的目录下,这时候最需要关心的几个问题就是:

(1)客户端发起一个url请求,获取连接对象。
           (2)服务器解析url,并且将指定的资源返回一个输入流给客户。
           (3)建立存储的目录以及保存的文件名。
           (4)输出了写数据。
           (5)关闭输入流和输出流。
代码实现:
我以struts2为例子,我们可以先创建一个文件下载工具类,这样方便调用,再在action的类方法里面去调用这个工具类中方法!
一、先是工具类DownLoadUtil.java,代码如下:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class DownLoadUtil {
	//downLoadThingName是要从远程网站或者服务器上下载文件的命名
	public static File saveUrlAs(String url, String filePath,String downLoadThingName, String method) {
		// System.out.println("fileName---->"+filePath);
		// 创建不同的文件夹目录
		File file = new File(filePath);
		// 判断文件夹是否存在
		if (!file.exists()) {
			// 如果文件夹不存在,则创建新的的文件夹
			file.mkdirs();
		}
		FileOutputStream fileOut = null;
		HttpURLConnection conn = null;
		InputStream inputStream = null;
		try {
			// 建立链接
			URL httpUrl = new URL(url);
			conn = (HttpURLConnection) httpUrl.openConnection();
			// 以Post方式提交表单,默认get方式
			conn.setRequestMethod(method);
			conn.setDoInput(true);
			conn.setDoOutput(true);
			// post方式不能使用缓存
			conn.setUseCaches(false);
			// 连接指定的资源
			conn.connect();
			// 获取网络输入流
			inputStream = conn.getInputStream();
			BufferedInputStream bis = new BufferedInputStream(inputStream);
			// 判断文件的保存路径后面是否以/结尾
			if (!filePath.endsWith("/")) {

				filePath += "/";

			}
			// 写入到文件(注意文件保存路径的后面一定要加上文件的名称)
			fileOut = new FileOutputStream(filePath + downLoadThingName);
			BufferedOutputStream bos = new BufferedOutputStream(fileOut);

			byte[] buf = new byte[4096];
			int length = bis.read(buf);
			// 保存文件
			while (length != -1) {
				bos.write(buf, 0, length);
				length = bis.read(buf);
			}
			bos.close();
			bis.close();
			conn.disconnect();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("抛出异常!!");
		}
		return file;
	}
二、action中的实现方法代码:
public String docDown() throws Exception{
	Document document= documentDao.tokeDoc(docId);//这里是从数据库查询出的文档对象,要根据自己情况自行创建
	String docUrl = "http://seopic.699pic.com/photo/50078/6395.jpg_wh1200.jpg";//这里可以加上自己的文件名称变量,如:document.getDocumentName()
	//String fileName = docUrl.substring(docUrl.lastIndexOf("/"));这里会创建6395.jpg_wh1200.jpg文件夹
	String fileName = "downLoad";
	String filePath = "d:/";
	File file = DownLoadUtil.saveUrlAs(docUrl, filePath + fileName,document.getDocumentName(), "GET");
	System.out.println("Run ok!/Get URL file " + file);
	return null;
}
三、struts.xml中的action配置,只需指定method方法为docDown, 其他的result、param不需要!

其中有些代码是根据别人改写而来的!文中有啥不对的地方,欢迎大家指正!

  • 0
    点赞
  • 0
    评论
  • 6
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值