Weex 实现文件的下载
需求:在使用weex框架时,我们使用vue文件写页面,在native端加载服务器端的js页面时由于网络状态的不确定性,我们需要在第一次加载的时候对js页面进行本地存储。也就是说我们需要把js文件下载到本地,然后进行加载,这样可以避免出现网络环境不好的情况下卡顿白屏等问题。
解决办法:查了一些文档,发现直接在vue页面内添加下载逻辑不太方便,所以使用的是原生端扩展的方法进行文件的下载,关于原生端的扩展可以在这里进行查看http://weex-project.io/cn/references/advanced/extend-to-ios.html
逻辑:

注意:文件路径的规范,详情参考上一篇博客。
native端(ios)
原生类文件:
.h
// JSDownloaderModule.h
// weidaikuan
//
// Created by JianF.Sun on 17/7/31.
// Copyright © 2017年 ever. All rights reserved.
// #import <Foundation/Foundation.h>
#import <WeexSDK/WeexSDK.h> @interface JSDownloaderModule : NSObject -(void)jydownloadJSFile:(NSString *)urlStr callback:(void(^)(NSString* path))callback; @end
.m
//
// JSDownloaderModule.m
// weidaikuan
//
// Created by JianF.Sun on 17/7/31.
// Copyright © 2017年 ever. All rights reserved.
// #import "JSDownloaderModule.h"
#import "AppDelegate.h"
#import "JYLoadingView.h"
#import "NSString+Utils.h"
@implementation JSDownloaderModule WX_EXPORT_METHOD(@selector(jydownloadJSFile:callback:))
//file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
///var/mobile/Containers/Data/Application/D99A000B-5E21-451C-B701-3350098EBFA3/Documents/infomation.js
-(void)jydownloadJSFile:(NSString *)urlStr callback:(void(^)(NSString* path))callback{
JYLoadingView *loading = [JYLoadingView new];
[loading jyShowLoadingview:@"正在加载"];
NSLog(@"download----url----%@",urlStr); if ([urlStr hasPrefix:@"file:///"]) {//本地路径直接返回
[loading jyRemoveLoadingview:@""];
callback(urlStr);
} //http类型
NSString *fileName = [self getFileName:urlStr];//待加密
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:]; NSString *dirpath = [NSString stringWithFormat:@"%@/JS",docDir]; NSString *filepath = [NSString stringWithFormat:@"%@/%@",dirpath,fileName]; if (![[NSFileManager defaultManager]fileExistsAtPath:dirpath]) { [[NSFileManager defaultManager] createDirectoryAtPath:dirpath withIntermediateDirectories:YES attributes:nil error:nil]; }else{
NSLog(@"有这个文件了");
} if ([[NSFileManager defaultManager] fileExistsAtPath:filepath]) {
NSString *pathNew = [NSString stringWithFormat:@"file://%@",filepath]; dispatch_async(dispatch_get_main_queue(), ^{
[loading jyRemoveLoadingview:@""];
callback(pathNew);
});
}else{ //1.网址
NSURL *url=[NSURL URLWithString:urlStr];
//2.请求
NSURLRequest *request=[NSURLRequest requestWithURL:url];
//3.队列
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
//4.发送异步请求
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * response, NSData * data, NSError * connectionError) { if (![data writeToFile:filepath atomically:YES]) {
NSLog(@"文件写入错误");
dispatch_async(dispatch_get_main_queue(), ^{
[loading jyRemoveLoadingview:@""]; });
}else{ NSString *pathNew = [NSString stringWithFormat:@"file://%@",filepath]; dispatch_async(dispatch_get_main_queue(), ^{ [loading jyRemoveLoadingview:@""];
callback(pathNew);
}); } }]; } }
//去掉http前缀,获取存储文件的名称
-(NSString*)getFileName:(NSString*)urlStr{
int length=(int)urlStr.length;
// NSLog(@"length===%d",length);
NSString *result=@"";
for (int i=length-; i>-; i--) {
if ([[urlStr substringWithRange:NSMakeRange(i, )] isEqualToString:@"/"]) {
NSString *tem=[urlStr substringWithRange:NSMakeRange(i+, length-i-)];
result=tem; return [result md5];
}
}
return result;
} @end
注册自定义module:
[WXSDKEngine registerModule:@"jsdownloader" withClass:[JSDownloaderModule class]];
weex(js端)
获取module
const jsdownloader = weex.requireModule('jsdownloader')
调用native端口
jsdownloader.jydownloadJSFile(config.jsURL('face.js'),function (e) {
console.log('callback'+e);
var url = e;
var params = {
'url': url,
'animated' : 'true',
}
navigator.push(params, function () {});
// modal.toast({message: this.platform, duration:2})
});
大功告成!!!
Weex 实现文件的下载的更多相关文章
- PHP 文件限速下载代码
php 文件限速下载代码 <?php include("DBDA.class.php"); $db = new DBDA(); $bs = $_SERVER["QU ...
- IOS下载查看PDF文件(有下载进度)
IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...
- [No00006B]方便的网络下载工具wget 可下载网站目录下的所有文件(可下载整个网站)
wget是linux下命令行的下载工具,功能很强大,它能完成某些下载软件所不能做的,比如如果你想下载一个网页目录下的所有文件,如何做呢?网络用户有时候会遇到需要下载一批文件的情况,有时甚至需要把整个网 ...
- ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址
原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...
- 伪静态重写模块rewrite.dll及httpd.ini文件参考下载
伪静态重写模块rewrite.dll及httpd.ini文件参考下载 http://www.ledaokj.com/download/rewrite.rar 服务器端开启伪静态,可以查看以下文章< ...
- 如何设置让iis服务器支持.apk文件的下载
随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目 •2. 或使用Cocopod 导入AFNetworking3.0+ •3. ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传. 在实际开发中,输入输出流用的比较少,但 ...
- servlet设置缓存时间以及文件的下载
缓存时间的设置: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletE ...
随机推荐
- SQL Server 阻塞原因分析
这里通过连接在sysprocesses里字段值的组合来分析阻塞源头,可以把阻塞分为以下5种常见的类型(见表).waittype,open_tran,status,都是sysprocesses里的值,“ ...
- C# 实现简单仿QQ登陆注册功能
闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...
- 【BZOJ3555】 [Ctsc2014]企鹅QQ
BZOJ3555 [Ctsc2014]企鹅QQ Solution 只需要前缀Hash,然后考虑每一段的贡献就好了!!! 代码实现 #include<stdio.h> #include< ...
- Python -bs4介绍
https://cuiqingcai.com/1319.html Python -BS4详细介绍Python 在处理html方面有很多的优势,一般情况下是要先学习正则表达式的.在应用过程中有很多模块是 ...
- 01_python_初始python
一.初始python python是一门解释型语言,弱类型语言 / python解释器最为常用的是cpython(官方) 弱类型语言: a = 1 a = 'alex' #说明变量a既可以是整 ...
- Django(ORM查询1)
day69 参考:http://www.cnblogs.com/liwenzhou/p/8660826.html 在Python脚本中调用Django环境 orm1.py import os if _ ...
- cglib invoke 和 invokeSuper 可用的组合
在深入字节码理解invokeSuper无限循环的原因中,我们理解的cglib的原理和其中一个合理的调用方式.但是这个调用方式是基于类的,对所有实例生效.实际场景中,我们可能只是希望代理某个具体的实例, ...
- 如何给wp(Windows phone)中搜索关键字加亮?
问题来源 最近在群里看到群友讨论在wp中有个搜索功能,要求搜索关键字在搜索结果内容中加亮(即加颜色),由于wp中没有自带这样的控件,于是大家各抒自见,有人说用第三方控件,有人说用richtextbox ...
- C# 开发代码标准
开发标准文件 文件名称:C#开发规范 版 本:V2.0 前言 目的是为了规范每个人的编程风格,为确保系统源程序可读性,从而增强系统可维护性,制定下述编程规范,以规范系统各部分编程.系统继承的其它资源中 ...
- django 之 发送邮箱
发送邮箱的话首先在settings文件里写下边的这些设置: #邮件服务配置文件 SSL认证,验证 EMAIL_USE_SSL = True #邮箱服务 EMAIL_HOST = 'smtp.qq.co ...