精华内容
下载资源
问答
  • Java利用URL实现文件下载

    万次阅读 2018-10-25 00:36:11
    利用URL(网络资源统一定位符),我们可以进行文件的定位和下载, 如果我们想让下载速度提高一些,我们通常有以下方法: 1.提高网络带宽,提升网络速度 2.开通网站vip,实现高速下载或上传 3.新增下载线程,实现...

    利用URL(网络资源统一定位符),我们可以进行文件的定位和下载,

    如果我们想让下载速度提高一些,我们通常有以下方法:

    1.提高网络带宽,提升网络速度

    2.开通网站vip,实现高速下载或上传

    3.新增下载线程,实现多线程同时下载

    通常情况下,方法1是作为一个普通程序员是无法实现的,因为网络带宽是由网络运行商限定,

    除非我们多交钱或者是开通专用通道(vpn),

    方法2的话,也是需要花钱,比如某云盘,只要你充值会员,就可以实现高速下载或是上传文件,

    其实,我说那么多都是废话,我想分享给大家的就是方法3,利用URL进行多线程下载,

    由于代码注释我都写的很明了,所有直接上代码了,下面就是主类代码,不需引入三方jar包,可直接运行,

    运行该类可以从hao123网站下载一个输入法,当然了,URL地址可以随便更改。

    package com.yc.net;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Date;
    
    /**
     * 多线程下载
     * 
     * @author jam
     *
     */
    public class ThreadDownloader {
    
    	public static void main(String[] args) throws IOException, InterruptedException {
    		// 记录开始下载的时间
    		long begin_time = new Date().getTime();
    
    		// 创建一个URL链接
    		// 从hao123网站下载一个输入法,下面是下载地址
    		URL url = new URL("http://softdown1.hao123.com/hao123-soft-online-bcs/soft/2017_09_29_jpwb2017qj.exe");
    
    		// 获取连接
    		URLConnection conn = url.openConnection();
    
    		// 获取文件全路径
    		String fileName = url.getFile();
    
    		// 获取文件名
    		fileName = fileName.substring(fileName.lastIndexOf("/"));
    
    		System.out.println("开始下载>>>");
    
    		// 获取文件大小
    		int fileSize = conn.getContentLength();
    
    		System.out.println("文件总共大小:" + fileSize + "字节");
    
    		// 设置分块大小
    		int blockSize = 1024 * 1024;
    		// 文件分块的数量
    		int blockNum = fileSize / blockSize;
    
    		if ((fileSize % blockSize) != 0) {
    			blockNum += 1;
    		}
    
    		System.out.println("分块数->线程数:" + blockNum);
    
    		Thread[] threads = new Thread[blockNum];
    		for (int i = 0; i < blockNum; i++) {
    
    			// 匿名函数对象需要用到的变量
    			final int index = i;
    			final int finalBlockNum = blockNum;
    			final String finalFileName = fileName;
    
    			// 创建一个线程
    			threads[i] = new Thread() {
    				public void run() {
    					try {
    
    						// 重新获取连接
    						URLConnection conn = url.openConnection();
    						// 重新获取流
    						InputStream in = conn.getInputStream();
    						// 定义起始和结束点
    						int beginPoint = 0, endPoint = 0;
    
    						System.out.print("第" + (index + 1) + "块文件:");
    						beginPoint = index * blockSize;
    
    						// 判断结束点
    						if (index < finalBlockNum - 1) {
    							endPoint = beginPoint + blockSize;
    						} else {
    							endPoint = fileSize;
    						}
    
    						System.out.println("起始字节数:" + beginPoint + ",结束字节数:" + endPoint);
    
    						// 将下载的文件存储到一个文件夹中
    						//当该文件夹不存在时,则新建
    						File filePath = new File("E:/temp_file/");
    						if (!filePath.exists()) {
    							filePath.mkdirs();
    						}
    						
    						FileOutputStream fos = new FileOutputStream(new File("E:/temp_file/", finalFileName + "_" + (index + 1)));
    
    						// 跳过 beginPoint个字节进行读取
    						in.skip(beginPoint);
    						byte[] buffer = new byte[1024];
    						int count;
    						// 定义当前下载进度
    						int process = beginPoint;
    						// 当前进度必须小于结束字节数
    						while (process < endPoint) {
    
    							count = in.read(buffer);
    							// 判断是否读到最后一块
    							if (process + count >= endPoint) {
    								count = endPoint - process;
    								process = endPoint;
    							} else {
    								// 计算当前进度
    								process += count;
    							}
    							// 保存文件流
    							fos.write(buffer, 0, count);
    
    						}
    						fos.close();
    						in.close();
    
    					} catch (Exception e) {
    						e.printStackTrace();
    					}
    				}
    
    			};
    			threads[i].start();
    
    		}
    
    		// 当所有线程都结束时才开始文件的合并
    		for (Thread t : threads) {
    			t.join();
    		}
    
    		// 若该文件夹不存在,则创建一个文件夹
    		File filePath = new File("E:/download/");
    		if (!filePath.exists()) {
    			filePath.mkdirs();
    		}
    		// 定义文件输出流
    		FileOutputStream fos = new FileOutputStream("E:/download/" + fileName);
    		for (int i = 0; i < blockNum; i++) {
    			FileInputStream fis = new FileInputStream("E:/temp_file/" + fileName + "_" + (i + 1));
    			byte[] buffer = new byte[1024];
    			int count;
    			while ((count = fis.read(buffer)) > 0) {
    				fos.write(buffer, 0, count);
    			}
    			fis.close();
    		}
    		fos.close();
    
    		long end_time = new Date().getTime();
    		long seconds = (end_time - begin_time) / 1000;
    		long minutes = seconds / 60;
    		long second = seconds % 60;
    
    		System.out.println("下载完成,用时:" + minutes + "分" + second + "秒");
    
    	}
    
    }
    

     

    该类利用了多线程进行文件的下载,等到每个线程都下载完成后,我们将每个线程下载好的文件合并为一个完整的文件。

    可以看到,三个线程同时进行下载,下图展示了临时文件的存储情况:

    程序成功运行完后,控制台输出情况如下:

    当所有的线程都下载好了临时文件后,程序会将这些临时文件合并为一个完整的文件:

    这个时候,我们可以看到一个完整的文件已经下载到了我们指定的文件夹中了,这样,我们利用URL进行多线程下载就成功了。

    该文章只是作为我学习URL和多线程的笔记,刚入门的童鞋可以参考一下,如有错误,欢迎指正。

    文章属原创,如需引用,请注明出处,谢谢。

    展开全文
  • http下载器(URLDownloadToFile )

    热门讨论 2009-12-22 09:57:17
    http下载,实现 目标另存为 的效果。可以自行编辑下载路径,可显示下载文件的大小,当前已下载大小,下载时间,以及下载进度条。该工程在vs2003中编译、运行成功。该资源来自网络,就不要分了。
  • 谈一谈url实现文件下载

    千次阅读 2018-11-03 15:23:29
    说到标题,后台返回一个url,前端浏览器打开实现下载功能,直接想到的就是window.open(url) 来实现下载,但是这种方法 我个人认为一闪而过的白色页面导致用户体验不是很好, so,就随手写写。 1 window.location....

    前几天,一个关于下载的问题,把我困在原地蛮久,记录一下。

    说到标题,后台返回一个url,前端浏览器打开实现下载功能,直接想到的就是window.open(url) 来实现下载,但是这种方法 我个人认为一闪而过的白色页面导致用户体验不是很好, so,就随手写写。

    • 1 window.location.href = url;
    • 2 a标签下载,栗子

    可以使用download属性指定下载下来的文件名

      我在vue中,因为是导出,url参数根据页面的选择项而变化,点击button,生成一个url,a标签的href属性绑定url,之后

    <a :href="downloadUrl" style="display: none" ref="download"></a>  // a标签隐藏
    this.$nextTick(() => { 
      this.$refs.download.click()
    })  这种的写法代替了jquery的trigger事件
    •  3  form下载
    /**
     * 兼容性的下载方式,调用浏览器的下载功能
     * 使用该方法需要跟后台协商好传递token的字段名为access_token
     * @param url 文件下载请求的url
     * @param token 传递的token
     * @param input 传递的其他参数 [{name: 'reportPath', value: '/conc/report/201710300735080796.doc'}, {name: 'isOnline', value: false}]
     */
    const downloadFile = (url, token, input = []) => {
      var $form = document.createElement('form')
      var $input = document.createElement('input')
      if (token) {
        $input.setAttribute('type', 'hidden')
        $input.setAttribute('name', 'access_token')
        $input.setAttribute('value', token)
      }
      $form.setAttribute('method', 'get')  // or post
      $form.setAttribute('action', url)
      $form.appendChild($input)
      for (var i = 0; i < input.length; i++) {
        var _input = document.createElement('input')
        _input.setAttribute('type', 'hidden')
        _input.setAttribute('name', input[i].name)
        _input.setAttribute('value', input[i].value)
        $form.appendChild(_input)
      }
      document.body.appendChild($form)
      $form.submit()
      $form.addEventListener('submit', function (e) {
        e.preventDefault()
      })
      document.body.removeChild($form)
    }

    但是这种方法的体验我感觉最好,但是是有限制的,如果你以get请求形式下载,url后面的?参数会全部被截取,我之前就是采用这种方式进行导出,结果才发现了这个问题。采取以上方式最好的url参数不是?携带,而是 以http://XXXX/${参数}的形式最好

    • 当为get请求时,请求所需的参数用input标签来传递,直接写在url后面是无效的。
    • 当为post类型时,queryString参数直接写在URL?后面,formData参数则用input标签传递  

    个人认为参数过多,就很麻烦了,因为要传多少数据就得用多少input标签。post请求的时候,如何后台需要指定content-type,form做不到

    • 4 iframe下载

    这种方式,就是如果给了多个url,他都可以给你下载下来,还能指定下载下来的文件名,栗子

     for (let i = 0; i < this.dataList.length; i++) {
              let url = this.dataList[i].contractSignUrl
              let token = cache.get('TOKEN').Authorization
              let ifr = document.createElement('iframe')
              ifr.style.display = 'none'
              ifr.src = url + '?access_token=' + token
              document.body.appendChild(ifr)
              // 保存页面 -> 保存文件
              ifr.contentWindow.document.execCommand('SaveAs', false, this.dataList[i].contractName)
            }

    如果有什么不对之处,希望大家能指出来,谢谢。

     

     

     

     

     

    展开全文
  • 已知文件url,批量下载文件

    千次阅读 2020-02-22 23:46:25
    打开迅雷,新建任务,将url批量复制到地址框内(最多1000条)。开始下载。 如果下载速度长时间为0。重启迅雷,重新开始下载
        打开迅雷,新建任务,将url批量复制到地址框内(最多1000条)。开始下载。
        如果下载速度长时间为0。重启迅雷,重新开始下载。
    
    展开全文
  • 通过url下载文件

    千次阅读 2017-08-14 15:38:10
    以上是直接通过url直接下载到本地。package com.yao.downLoadUrlImage;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import ...

    以下是直接通过url直接下载到本地。

    package com.yao.downLoadUrlImage;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class DownLoadUrlImage {
            // 通过get请求得到读取器响应数据的数据流
        public static InputStream getInputStreamByGet(String url) {
            try {
                HttpURLConnection conn = (HttpURLConnection) new URL(url)
                        .openConnection();
                conn.setReadTimeout(5000);
                conn.setConnectTimeout(5000);
                conn.setRequestMethod("GET");
                //防止屏蔽程序抓取而返回403错误  
                conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
    
                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    InputStream inputStream = conn.getInputStream();
                    return inputStream;
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
            // 将服务器响应的数据流存到本地文件
        public static void saveData(InputStream is, File file) {
            try (BufferedInputStream bis = new BufferedInputStream(is);
                    BufferedOutputStream bos = new BufferedOutputStream(
                            new FileOutputStream(file));) {
                byte[] buffer = new byte[1024];
                int len = -1;
                while ((len = bis.read(buffer)) != -1) {
                    bos.write(buffer, 0, len);
                    bos.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        public static void main(String[] args) {
            String url = "http://img.coocaa.com/www/attachment/forum/201602/16/085938u86ewu4l8z6flr6w.jpg";
            String[] split = url.split("\\/");
            String fileName = split[split.length - 1];
            File file = new File("d:/", fileName);
    
            InputStream inputStream = getInputStreamByGet(url);
            saveData(inputStream, file);
        }
    }
    
    

    以下是前端发送请求,经过struts2 后端响应后下载文件

    前端代码:

    html:(一定要有form表单)

    <form class="form-inline" id="uploadImages" role="form">
                <s:hidden name="imagesVO.imageUrl" id="imageUrlId"></s:hidden>
    </form>
    
    
    <input id="btn" class="btn btn-primary" type="button" value=" upload " onclick="downloadInfo('http://ssp.bbisbw.com/upload/20170811/20170811143642274300x250.gif');"/>
    

    js:

    function downloadInfo(url) {
            $("#imageUrlId").val(url);
            var exportForm = document.getElementById("uploadImages");
            exportForm.action="<%=request.getContextPath()%>/data/OfferData!downloadImage.action";
            exportForm.submit();
        }
    

    struts.xml配置

    <action name="OfferData" class="com.kkgame.sspop.data.action.OfferDataAction" method="do{1}">
                <result name="downloadImage" type="stream">  
                    <param name="contentType">application/octet-stream</param>  
                    <param name="contentDisposition">attachment;filename="${imageName}"</param>  
                    <param name="bufferSize">1024</param>
                    <param name="inputName">imageStream</param>  
                </result>
                <result name="falseDownload"></result>
    		</action>
    

    action:

    InputStream imageStream;//和struts.xml配置中的名称一致
    String imageName;//和struts.xml配置中的名称一致
    
    public String doDownloadImage(){
    		if(imagesVO == null){
    			imagesVO = new ImagesVO();
    		}
    //		String url = "http://ssp.bbisbw.com/upload/20170811/20170811143642274300x250.gif";
    		String url =imagesVO.getImageUrl();
    		//根据地址获取图片名称
    		String iName[] = imagesVO.getImageUrl().split("\\/");
    		imageName = iName[iName.length-1];//20170811143642274300x250.gif
    		try {
                HttpURLConnection conn = (HttpURLConnection) new URL(url)
                        .openConnection();
                conn.setReadTimeout(5000);
                conn.setConnectTimeout(5000);
                conn.setRequestMethod("GET");
                //防止屏蔽程序抓取而返回403错误  
                conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                	imageStream = conn.getInputStream();
                	return "downloadImage";
                }else{
                	return "falseDownload";
                }
            } catch (IOException e) {
                e.printStackTrace();
                return "falseDownload";
            }
    		
    	}
    
    
    //get set
    public InputStream getImageStream() {
    		return imageStream;
    	}
    
    	public void setImageStream(InputStream imageStream) {
    		this.imageStream = imageStream;
    	}
    
    	public String getImageName() {
    		return imageName;
    	}
    
    	public void setImageName(String imageName) {
    		this.imageName = imageName;
    	}
    

    看NBA会员直播 看个球www.kangeqiu.top

    展开全文
  • 编写controller 实现文件上传与下载 3.1创建 @RestController @RequestMapping("/file") public class FileController { /** * 上传图片 * @param file * @param req * @return * @throws Exception */ @...
  • jq及html通过url下载文件

    万次阅读 2017-12-12 20:22:32
    a href="url 302到下载地址" download>下载</a> 例如: var link = document.createElement('a'); link.setAttribute("download", ""); link.href = data.fileUrl; link.click(); 二、通过form表...
  • Python爬虫之URL管理器:Python爬虫:URL管理器实现方式:Python爬虫之网页下载器:urllib2实现网页下载器的三种方法:具体代码: Python网页解析器:...
  • JAVA通过URL下载文件(POST,参数)

    万次阅读 2017-11-28 19:02:37
    通过统一资源定位(java.net.URL)获取连接(java.net.URLConnection)   * 2.设置请求的参数   * 3.发送请求  * 4.以输入流的形式获取返回内容 5.关闭输入流  *   * @author H__D  *  */ ...
  • socket http文件下载器c语言实现

    万次阅读 多人点赞 2016-02-29 18:52:56
    socket真是一个神奇的东西,可以说是另外一扇大门, 蕴藏着很多有趣的东西, 本文就介绍如何使用c语言使用socket实现一个http文件下载器.下载分为以下几个过程 解析出下载地址中的域名和文件名 通过域名获取服务器的IP...
  • java通过url链接下载文件的辅助工具类(http/https) 这个工具类用于从url地址获取文件文件流或字节数组。 直接贴代码: package com.gigi.utils; import java.io.BufferedInputStream; import java.io....
  • java实现通过url实现浏览器下载pdf文件 // 下载pdf文件工具类 public static void toDownload(HttpServletRequest request, HttpServletResponse response, Map<String, Object> map) { ServletOutputStream ...
  • Android利用DownloadManager实现文件下载

    千次阅读 2019-10-26 22:47:56
    Android中文件下载,app更新,我们一般利用的都是 Retrofit或者 Okhttp等实现,但其实Android 早在API 9之后,就为我们提供了DownLoadManager,这是Android提供的系统服务,通过这个服务下载文件,整个过程全部交给了...
  • HttpClient 通过资源URL下载资源

    千次阅读 2019-12-05 16:13:04
    HttpClient 通过资源URL下载资源 使用富文本编辑写文章什么的,从第三方拷贝过来的图文,里面的资源内容都是第三方的,如果第三方删除该... * 根据url下载文件,保存到filepath中 * @param url * @param filepa...
  • MFC通过URL下载并保存文件代码

    万次阅读 多人点赞 2013-03-12 23:32:22
    下面就是我自己写的一个根据URL下载并保存文件的函数,注意使用时需要在MFC项目的预编译头文件里加入#include ,因为上面我提到的那些类全部在这个头文件里。 第一参数为URL,第二个参数为保存路径。 返回值:...
  • 还对IE浏览器下载文件失败、出错进行了修复,保证中文文件名的正确显示,以及文件在IE下正确下载。 public InputStream getFileInputStream(String urlString) { InputStream is = null; try { // 构造URL ...
  • IDM下载器最新版本6.32.7

    万次阅读 2020-06-14 19:36:20
    IDM是一款老牌的Windows下载器,支持全网嗅探,倍速下载,批量下载等功能,。网上有很多老版本,其中很多并不稳定,不具备全网嗅探功能,比如网站视频无法直下,网站音频无法直下,而且多线程下载时最高支持8线程。...
  • js代码: (function(){ var _id = 你的id; ... var _temp = isHome ? "" : $('span[title*="全部文件"]')[0].title.slice(4);... // 下载文件的名称 var _path = encodeURIComponent(_temp + '/' + _na
  • 利用Retrofit实现文件下载

    千次阅读 2018-03-14 22:32:17
    利用Retrofit下载资源文件,正常情况下应该这样写的:public interface DownloadApiService { @GET Call&lt;ResponseBody&gt; downloadFile(@Url String url); } Call&lt;ResponseBody&gt; call ...
  • android调用系统下载器下载文件

    千次阅读 2016-09-08 09:33:08
    在项目中使用到了在...得到url文件下载地址  2.使用URL下载:  (1)下载前先判断文件是否已经在下载,避免重复下载:  // 判断该文件是否在下载 private boolean isDowning(String uri) { boolean fla
  • http文件下载c/c++ 多种方法

    万次阅读 2018-03-06 19:30:35
    1:使用winhttp下载#include &lt;afx.h&gt; #include &...bool DownloadSaveFiles(char* url,char *strSaveFile) {//下载文件并保存为新文件名 bool ret=false; CInternetSession S...
  • php 三种文件下载的实现

    万次阅读 2018-03-27 09:26:56
    1、直接添加文件链接 &... 下载文件 &amp;lt;/button&amp;gt; 点击该按钮下载: 2、传递参数查找并跳转到下载链接 传递参数: &amp;lt;button&amp;gt; &amp;lt;a
  • Netty实战一 Netty实现文件的上传和下载

    万次阅读 多人点赞 2019-12-28 10:39:56
    二、Netty实现文件的上传和下载 三、程序演示 1、下载演示 2、上传演示 一、Netty应用场景 讲了一些Netty的组件,来聊一聊大家最关心的事情吧,他能够做什么?毕竟,我们学习就是拿来用的嘛。我可以简单的概括...
  • 一般来说,我们的js文件下载会使用window.location.href定位到后端的接口,后端生成文件返回,然后浏览器自动下载。这种方法最简单,但是无法获取下载成功的通知,在大文件生成和下载的时候,时间过长,用户可能会...
  • 今天使用使用FileUtils实现一个简易文件选择器 做了一个简易的 文件下载器,功能很简单,提供目标文件url输入框,和下载后文件保存的磁盘路径及文件名,点击下载即可完成。 主要是—--使用commons-io-2.5.jar,这...
  • 百度文库下载器Python实现

    千次阅读 2018-07-12 14:46:16
    因此需要一个百度文库下载器。 之前有冰点文库下载器但是后来不好使了。 下面给出利用Python写的百度文库下载器。 此下载器可以下载doc类型的,txt类型的文本文档及PPT,不过PPT最终将以图片的形式保存。由于百度...
  • smb通过文件管理输入url链接出错

    千次阅读 2016-09-08 16:36:12
    由于一个系统需要samba的服务,我看了下没有samba的相关的包 于是就到其他系统上rpm -qa | grep samba看了下,...于是安装了以后,发现一个很郁闷的问题,那就是通过文件浏览器中输入samba服务器的地址没法访问 看
  • 根据okHttp简单的封装了一个根据url下载文件并更新进度的工具类,在此记录下,以后要使用可以进行参考 先来看看效果图: 接下来看看具体的代码实现 首先在:app中添加项目对于Okhttp的依赖: //okhttp compile '...
  • 不知道各位童鞋们是否遇到过需要使用python下载文件的需求,当然一般情况下,我们更多是使用下载器去批量下载文件。但有时我们需要批量下载PDF,通过python解析出url后,直接使用python进行下载才是最方便的。 对于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 321,182
精华内容 128,472
关键字:

url文件下载器