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 ...
随机推荐
- Django:在模板中获取当前url信息
确保项目配置里的context_processors包含django.template.context_processors.request. 从 Django 1.9 开始, 默认是已经配置的. P ...
- 托管博客到coding或者github
1. 部署网站到github的pages服务 参考: <在Github上面搭建Hexo博客(一):部署到Github> <Hexo搭建独立博客,托管到Github和Coding上教程 ...
- WPF学习笔记(2):准确定位弹出窗
效果图:使弹出的列表框紧随在单元格的下边缘. 第一次,尝试在XAML中设置Popup的定位方式:Placement="Mouse".基本能够定位,但当在输入前移动鼠标,列表框就会随 ...
- 企业项目开发--cookie(2)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2.1.3.CookieUtil:(cookie的基本操作:增删查,注意没有改) 1 package co ...
- 2018-2019-2 20175230 实验三《Java面向对象程序设计》实验报告
目录 实验三 实验三 敏捷开发与XP实践 实验内容 实验要求 实验步骤 (一) 编码标准 (二)敏捷开发与XP (三)敏捷开发与XP 实验体会 实验三 实验三 敏捷开发与XP实践 实验内容 1.XP基 ...
- 07_python_集合深浅拷贝
一.join li = ["李嘉诚", "麻花藤", "林海峰", "刘嘉玲"] s = "_".j ...
- solr 加载 停用/扩展词典
startup.bat 停止词典的效果
- re模块 模块
import re findall() 烦的奥 import re # 1. findall 查找所有结果,数据不是特别庞大 lst = re.findall('a','abcsdfasdfa') ...
- 反射 方法和函数 type
1. isinstance/issubclass/type *** issubclass 判断xxx类是否是xxx类的子类 class Animal: pass class Cat(Animal): ...
- GITLAB安装笔记
CentOS 7 最小安装后操作 设置时区timedatectl set-timezone Asia/Shanghai 添加 Gitlab 清华源 vi /etc/yum.repos.d/gitlab ...