精华内容
下载资源
问答
  • 需求简介,有一堆字体需要从oss上下载到本地,数据库只存了相对路径,但是完整路径可以拼接出来,每个字体要下载图片和字体并放入同一个文件夹(即一个字体一个文件夹) // 下载方法 //引入相关资源包 var fs = ...

    需求简介,有一堆字体需要从oss上下载到本地,数据库只存了相对路径,但是完整路径可以拼接出来,每个字体要下载图片和字体并放入同一个文件夹(即一个字体一个文件夹)

    // 下载方法

    //引入相关资源包
    var fs = require("fs");
    var path = require("path");
    var request = require("request");
    
    /**
     * 
     * @param {*} url  网络文件url地址
     * @param {*} fileName 	文件名
     * @param {*} dir 下载到的目录
     */
    function getfileByUrl(url,fileName,dir){
            console.log('------------------------------------------------')
            console.log(url)
            console.log(fileName)
            console.log(dir)
            let stream = fs.createWriteStream(path.join(dir, fileName));
            request(url).pipe(stream).on("close", function (err) {
                console.log("文件" + fileName + "下载完毕");
            });
    }
    

    //动态创建多级文件夹(同步)

    function makeDir(dirpath) {
        if (!fs.existsSync(dirpath)) {
            var pathtmp;
            dirpath.split("/").forEach(function(dirname) {
                if (pathtmp) {
                    pathtmp = path.join(pathtmp, dirname);
                }
                else { 
                    if(dirname){
                        pathtmp = dirname;
                    }else{
                        pathtmp = "/"; 
                    }
                }
                if (!fs.existsSync(pathtmp)) {
                    if (!fs.mkdirSync(pathtmp)) {
                        return false;
                    }
                }
            });
        }else{
            deleteFolderFiles(dirpath);
        }
        return true;
    }
    

    //主方法下载

    let fonts = [
        {
          label: '思源黑体',
          value: 'SourceHanSansSC-Regular',
          picUrl: '',
          type: 'woff'
        },
        {
          value: 'FZShuSong-Z01',
          label: '方正书宋',
          picUrl: '',
          type: 'ttf'
        },
        ...... 贼多
      ]
      //循环下载
    for (let i = 0; i < fonts.length; i++) {
        let item = fonts[i]
        let picUrl = 'https://xxx/font/'+item.value+'/'+item.value+'.png'
        let fontUrl = 'https://xxx/font/'+item.value+'/'+item.value+'.'+item.type
        let dir = 'test12138/'+item.value
        makeDir(dir)
        getfileByUrl(picUrl, item.value+'.png', dir)
        getfileByUrl(fontUrl, item.value+'.'+item.type, dir)
    }
    

    //运行

    node yourjs.js
    

    若报错说缺啥包,npm引入即可;

    Good Luck!

    乌拉~

    展开全文
  • 主要介绍了通过JavaScript下载文件到本地的方法(单文件),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 一、浏览器弹下载框选择目录下载: 不弹下载的提示框是因为你的提交方式是ajax提交,是不会弹出提示框的,你得换成form表单提交,就可以顺利弹框。 js模拟form表单提交可以参照我另一篇博客:...

    一、浏览器弹下载框选择目录下载:

    不弹下载的提示框是因为你的提交方式是ajax提交,是不会弹出提示框的,你得换成form表单提交,就可以顺利弹框。

    js模拟form表单提交可以参照我另一篇博客:https://blog.csdn.net/hskw444273663/article/details/86170641

        //材料下载处理
        public static void downloadMaterialFile(HttpServletRequest request,HttpServletResponse response,String src){
            try {
    		String fileName = src.substring(src.lastIndexOf("/"));
    		String fileNameEncode = URLEncoder.encode(fileName.substring(1, fileName.length()), "utf-8");
    		//判断字符串中是否包含中文
    		Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
    		Matcher m = p.matcher(src);
    		if (m.find()) {
    		   src = src.replace(fileName.substring(1, fileName.length()), fileNameEncode);
    		}
    
    		URL url_upload = new URL(src);
    		HttpURLConnection conn = (HttpURLConnection) url_upload.openConnection();
    		//设置超时间为3秒
    		conn.setConnectTimeout(3*1000);
    		//防止屏蔽程序抓取而返回403错误
    		conn.setRequestProperty("User-Agent", "Mozilla/4.0?(compatible;?MSIE?5.0;?Windows?NT;?DigExt)");
    		conn.setRequestProperty("Accept-Charset", "utf-8");
    		conn.setRequestMethod("GET");
    		//得到输入流
    		InputStream inputStream = conn.getInputStream();
    		//获取自己数组
    		byte[] getData = readInputStream(inputStream);
    		response.reset();//OutputStream和Writer在一个response中不能同时获得
    		// 以流的形式下载文件
    		response.setContentType("multipart/form-data");
    		OutputStream toClient = null;
    		// 设置相应头,控制浏览器下载该文件,这里就是会出现当你点击下载后,出现的下载地址框
    		response.setHeader("Content-Disposition", "attachment;filename=\""
    					+ new String(fileName.getBytes("gb2312"), "ISO8859-1") + "\"");
    		toClient = new BufferedOutputStream(response.getOutputStream());
    		toClient.write(getData);
    		toClient.flush();
    		toClient.close();
    	    } catch (UnsupportedEncodingException e2) {
    		    e2.printStackTrace();
    	    } catch (IOException e) {
    		    e.printStackTrace();
    	    }
            
       }
    				
        //将输入流转换成二进制文件流
        public static byte[] readInputStream(InputStream inputStream) throws IOException{
    	    BufferedInputStream reader = null;
    	    reader =  new BufferedInputStream(inputStream);
            List<Integer> list = new ArrayList<Integer>();
            int a = 0;
            while((a = reader.read()) != -1){
                 list.add(a);
            }
            byte[] content = new byte[list.size()];
            for(int index = 0 ; index < list.size() ; index ++){
                 content[index] = list.get(index).byteValue();
            }
            return content;
        }

    二、浏览器不弹下载框,代码中指定下载目录:

    public boolean createTemplateFile(HttpServletRequest request, HttpServletResponse response) throws IOException{
    		boolean flag = false;
    		String src = request.getParameter("fileUrl");
    		FileOutputStream fos = null;
    		String craetePath ="upload/meterial";
    		String pathRoot=request.getSession().getServletContext().getRealPath("");
    
    		File file=new File(pathRoot+"/"+craetePath);  
    		if(!file.exists()) {    
    		    file.mkdirs();    
    		} 
    		//材料下载处理
    		try {
    			String fileName = src.substring(src.lastIndexOf("/"));
    			String fileNameEncode = URLEncoder.encode(fileName.substring(1, fileName.length()), "utf-8");
    			//判断字符串中是否包含中文
    		    Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
    		    Matcher m = p.matcher(src);
    		    if (m.find()) {
    		    	src = src.replace(fileName.substring(1, fileName.length()), fileNameEncode);
    		    }
    
    			URL url_upload = new URL(src);
    			HttpURLConnection conn = (HttpURLConnection) url_upload.openConnection();
    			//设置超时间为3秒
    			conn.setConnectTimeout(3*1000);
    			//防止屏蔽程序抓取而返回403错误
    			conn.setRequestProperty("User-Agent", "Mozilla/4.0?(compatible;?MSIE?5.0;?Windows?NT;?DigExt)");
    			conn.setRequestProperty("Accept-Charset", "utf-8");
    			conn.setRequestMethod("GET");
    			response.reset();//OutputStream和Writer在一个response中不能同时获得
    			//得到输入流
    			InputStream inputStream = conn.getInputStream();
    			fos = new FileOutputStream(pathRoot +"/"+ craetePath + fileName);
    
    			byte[] buffer = new byte[1024];
    			int len = 0;
    			while ((len = inputStream.read(buffer)) != -1) {
    				fos.write(buffer, 0, len);
    			}
    			fos.flush();
    			inputStream.close();
    			fos.close();
    			flag = true;
    			return flag; 
    		} catch (UnsupportedEncodingException e2) {
    			e2.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return flag;
    	}

     

    展开全文
  • js实现下载文件到本地磁盘

    千次阅读 2019-09-29 12:41:26
    js下载文件到本地磁盘 一、使用a标签下载 ·HTML5给a标签新增了download属性,利用这个属性可以便捷的实现下载已有的文件功能,而不需要任何插件。 <div οnlοad="autoClickA()"> <a href="aaa.png" ...

    js下载文件到本地磁盘

    一、使用a标签下载

    ·HTML5给a标签新增了download属性,利用这个属性可以便捷的实现下载已有的文件功能,而不需要任何插件。

    <div οnlοad="autoClickA()"> 
    		<a href="aaa.png" download="aaa.png"><span id="down">下载</span></a> 
    </div>
    

    ·download属性默认使用文件名,可以设置一个值来为下载的文件命名。所允许的值没有限制。
    ·也可以通过js来实现a标签点击事件自动触发,实现自动下载:

    <script type="text/javascript">
    function autoClickA(){
    	document.getElementById("down").click();
    }
    </script>
    

    二、使用插件FileSaver.js下载

    ·使用开源插件FileSaver.js下载
    1、FileSaver.js源码:

    /*
    * FileSaver.js
    * A saveAs() FileSaver implementation.
    *
    * By Eli Grey, http://eligrey.com
    *
    * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)
    * source  : http://purl.eligrey.com/github/FileSaver.js
    */
    
    // The one and only way of getting global scope in all environments
    // https://stackoverflow.com/q/3277182/1008999
    var _global = typeof window === 'object' && window.window === window
      ? window : typeof self === 'object' && self.self === self
      ? self : typeof global === 'object' && global.global === global
      ? global
      : this
    
    function bom (blob, opts) {
      if (typeof opts === 'undefined') opts = { autoBom: false }
      else if (typeof opts !== 'object') {
        console.warn('Deprecated: Expected third argument to be a object')
        opts = { autoBom: !opts }
      }
    
      // prepend BOM for UTF-8 XML and text/* types (including HTML)
      // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
      if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
        return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })
      }
      return blob
    }
    
    function download (url, name, opts) {
      var xhr = new XMLHttpRequest()
      xhr.open('GET', url)
      xhr.responseType = 'blob'
      xhr.onload = function () {
        saveAs(xhr.response, name, opts)
      }
      xhr.onerror = function () {
        console.error('could not download file')
      }
      xhr.send()
    }
    
    function corsEnabled (url) {
      var xhr = new XMLHttpRequest()
      // use sync to avoid popup blocker
      xhr.open('HEAD', url, false)
      try {
        xhr.send()
      } catch (e) {}
      return xhr.status >= 200 && xhr.status <= 299
    }
    
    // `a.click()` doesn't work for all browsers (#465)
    function click (node) {
      try {
        node.dispatchEvent(new MouseEvent('click'))
      } catch (e) {
        var evt = document.createEvent('MouseEvents')
        evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,
                              20, false, false, false, false, 0, null)
        node.dispatchEvent(evt)
      }
    }
    
    var saveAs = _global.saveAs || (
      // probably in some web worker
      (typeof window !== 'object' || window !== _global)
        ? function saveAs () { /* noop */ }
    
      // Use download attribute first if possible (#193 Lumia mobile)
      : 'download' in HTMLAnchorElement.prototype
      ? function saveAs (blob, name, opts) {
        var URL = _global.URL || _global.webkitURL
        var a = document.createElement('a')
        name = name || blob.name || 'download'
    
        a.download = name
        a.rel = 'noopener' // tabnabbing
    
        // TODO: detect chrome extensions & packaged apps
        // a.target = '_blank'
    
        if (typeof blob === 'string') {
          // Support regular links
          a.href = blob
          if (a.origin !== location.origin) {
            corsEnabled(a.href)
              ? download(blob, name, opts)
              : click(a, a.target = '_blank')
          } else {
            click(a)
          }
        } else {
          // Support blobs
          a.href = URL.createObjectURL(blob)
          setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s
          setTimeout(function () { click(a) }, 0)
        }
      }
    
      // Use msSaveOrOpenBlob as a second approach
      : 'msSaveOrOpenBlob' in navigator
      ? function saveAs (blob, name, opts) {
        name = name || blob.name || 'download'
    
        if (typeof blob === 'string') {
          if (corsEnabled(blob)) {
            download(blob, name, opts)
          } else {
            var a = document.createElement('a')
            a.href = blob
            a.target = '_blank'
            setTimeout(function () { click(a) })
          }
        } else {
          navigator.msSaveOrOpenBlob(bom(blob, opts), name)
        }
      }
    
      // Fallback to using FileReader and a popup
      : function saveAs (blob, name, opts, popup) {
        // Open a popup immediately do go around popup blocker
        // Mostly only available on user interaction and the fileReader is async so...
        popup = popup || open('', '_blank')
        if (popup) {
          popup.document.title =
          popup.document.body.innerText = 'downloading...'
        }
    
        if (typeof blob === 'string') return download(blob, name, opts)
    
        var force = blob.type === 'application/octet-stream'
        var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari
        var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent)
    
        if ((isChromeIOS || (force && isSafari)) && typeof FileReader !== 'undefined') {
          // Safari doesn't allow downloading of blob URLs
          var reader = new FileReader()
          reader.onloadend = function () {
            var url = reader.result
            url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')
            if (popup) popup.location.href = url
            else location = url
            popup = null // reverse-tabnabbing #460
          }
          reader.readAsDataURL(blob)
        } else {
          var URL = _global.URL || _global.webkitURL
          var url = URL.createObjectURL(blob)
          if (popup) popup.location = url
          else location.href = url
          popup = null // reverse-tabnabbing #460
          setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s
        }
      }
    )
    
    _global.saveAs = saveAs.saveAs = saveAs
    
    if (typeof module !== 'undefined') {
      module.exports = saveAs;
    }
    
    

    2、使用:
    ·页面引入FileSaver.js
    ·直接调用 saveAs(‘要下载的文件流’,‘文件名’) 方法即可

    //getVoiceBlob是之前做语音识别demo写的音频blob获取函数,返回音频的blob
    var blob = getVoiceBlob();
    		saveAs(blob,"test.mp3");//第二个参数是为下载文件命名
    

    ·其实之前是想要js直接写文件到磁盘,但是没有找到能实现的例子,这两个下载都会弹出文件路径选择和下载确认框,我想要的是不弹框,给定路径直接写入文件(好像并不能实现,js菜鸟表示不会,有大佬可以实现的话,请务必教我)后来只好上传给服务器由Java来写文件。

    展开全文
  • js通过文件的url下载文件到本地.pdf
  • var xhr = new XMLHttpRequest(); xhr.open("post","url",true); ... xhr.responseType = 'blob';//设置返回的数据类型为 blob xhr.onreadystatechange=state_Change; function state_Change() ... if (xhr.readyState==4...
  • js通过文件的url下载文件到本地

    万次阅读 2019-03-25 15:31:57
    同源单文件 ... 标签的 download 属性下载文件 const elt = document.createElement('a'); elt.setAttribute('href', url); elt.setAttribute('download', 'file.png'); elt.style.display = 'none'; ...

    同源单文件

    针对单文件的情况下,同源的文件,可以通过 < a> 标签的 download 属性下载文件

    const elt = document.createElement('a');
    elt.setAttribute('href', url);
    elt.setAttribute('download', 'file.png');
    elt.style.display = 'none';
    document.body.appendChild(elt);
    elt.click();
    document.body.removeChild(elt);
    

    但是这个方案并不适用于非同源的资源,此时它相当于普通的超链接,点击会跳转到资源页面,而不是下载。

    非同源

    如果不存在CORS问题, 可以借助Blob实现下载(构造xhr请求文件地址, 以Blob的形式接收Response):

    function downloadWithBlob(url) {
     fetch(url).then(res => res.blob().then(blob => {
      var a = document.createElement('a');
      var url = window.URL.createObjectURL(blob);
      var filename = 'file.png';
      a.href = url;
      a.download = filename;
      a.click();
      window.URL.revokeObjectURL(url);
     }));
    }
    

    如果存在CORS问题,可以考虑使用 canvas 将图片转换成 base64 编码之后再通过 标签的 download 属性下载:

    function downloadPic(url) {
     const img = new Image;
     const canvas = document.createElement('canvas');
     const ctx = canvas.getContext('2d');
     img.onload = function() {
      canvas.width = this.width;
      canvas.height = this.height;
      ctx.drawImage(this, 0, 0);
     
      const elt = document.createElement('a');
      elt.setAttribute('href', canvas.toDataURL('image/png'));
      elt.setAttribute('download', 'file.png');
      elt.style.display = 'none';
      document.body.appendChild(elt);
      elt.click();
      document.body.removeChild(elt);
     };
     img.crossOrigin = 'anonymous';
     img.src = url;
    }
    

    如果有文件content

    function funDownload(content, filename) {
        // 创建隐藏的可下载链接
        var eleLink = document.createElement('a');
        eleLink.download = filename;
        eleLink.style.display = 'none';
        // 字符内容转变成blob地址
        var blob = new Blob([content]);
        eleLink.href = URL.createObjectURL(blob);
        // 触发点击
        document.body.appendChild(eleLink);
        eleLink.click();
        // 然后移除
        document.body.removeChild(eleLink);
    };
    
    展开全文
  • 用于js下载文件到本地,js根据url或数据下载文件到本地,使用方法见https://blog.csdn.net/mudarn/article/details/118547480?spm=1001.2014.3001.5502
  • js模拟点击下载文件到本地

    千次阅读 2019-01-30 16:41:20
    function fake_click(obj) { var ev = document.createEvent("MouseEvents"); ev.initMouseEvent( "click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false... console.log('下载报告') }  
  • 其实就是利用了Microsoft.XMLHTTP实现远程文件的保存,不过需要修改下才可以运行,地址传参问题
  • js下载文件到本地的各种方法总结

    万次阅读 2019-05-19 16:31:44
    三、该方法IE和火狐都可以,url表示要下载文件路径: function(url){  try {  var elemIF = document.createElement("iframe");  elemIF.src = url;  elemIF.style.display = "none";  document.body....
  • JavaScript写入文件到本地

    万次阅读 2018-01-12 15:23:43
    工作中有时需要通过 JavaScript 保存文件到本地,我们都知道 JavaScript 基于安全的考虑,是不允许直接操作本地文件的。 IE 可以通过 VB 插件的方式进行,而 Chrome 和 firefox 都不支持 JavaScript本地写入文件...
  • 1、文件下载页面用来显示要下载文件数量和大小,以及总文件大小。数据展示这里就不贴了,就贴后面需要用到的三个弹出层吧:遮罩层、文件下载提示框、下载完成弹出框。 &lt;!-- 遮罩层 --&gt; &lt;...
  • 设置下载目录,让文件下载至规定的目录:C:\Users\liu\Desktop\工程项目 开始下载文件: 这里的文件都是通过网页链接下载的,可以自己去替换文件链接: 文件已完成下载,去文件目录中看看: 文件已...
  • js通过服务器相对路径下载文件到本地
  • 总是碰到下载文件的需求,在这里统一整理一下方法 一、此方法火狐有些版本是不支持的 window.location.href = 'https://*****.oss-cn-**.aliyuncs.com/*********'; 二、为了解决火狐有些版本不支持,可以改成...
  • js自动下载文件到本地 function InitAjax() { var ajax; if(window.ActiveXObject){ var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.X....
  • js怎么传递一个上传文件的路径jquery或者js获取上传文件的路径问题现有一表单,...js中如何将某地址的图片保存到本地指定文件夹中?用JSPSMA处理,参考下面代码实现:用js如何实现点击按钮打开一个指定路径下的文件...
  • 百度浏览器扩展开发者 downloadsAPI js自动下载文件到本地的实现代码 Chrome Extension Ajax & downloads【谷歌浏览器扩展之Ajax和下载
  • 下载 axios.js 文件到本地

    千次阅读 2020-11-19 11:09:43
    1、百度搜索 GitHub 官网:https://github.com/ 2、搜索 axios 3、点击 axios/axios 4、下载到本地 5、解压,进入到 dist 文件夹 自己下载,不求人。
  • 前端代码 /** * 通过ajax下载文件 ... * @param {string} filePath 文件本地路径 * @returns */ function downloadFileByAjax(fileUrl, filePath,index) { if(index == null || index == undefined){
  • Js下载文件到本地(兼容多浏览器)

    千次阅读 2018-11-26 17:21:18
    window.downloadFile = function (sUrl) {  //iOS devices do not support downloading. We have to inform user about this.  if (/(iP)/g.test(navigator.userAgent)) {  alert('Your device does n...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,811
精华内容 95,524
关键字:

js下载文件到本地指定目录