观书散遗帙,探古穷至妙。这篇文章主要讲述智汀云盘-开发指南android:文件/文件夹上传下载:gomobile相关的知识,希望能为你提供帮助。
1.为什么要使用gomobile作为上传下载插件?
-
高性能-协程
golang可以实现跨平台编译,开发出的插件android/OS平台都可以使用,研发人员能少写代码,运维方便维护部署。golang 源码级别支持协程,实现简单。协程使用,当底层遇到阻塞会自动切换,也就是逻辑层通过同步方式实现异步,充分利用了系统资源,同时避免了异步状态机的反人类异步回调,实现方式更为直观简单。golang 协程是通过多线程维护,所以避免不了锁的使用,但也极大解决了研发效率问题。
-
生态
有谷歌做背书,生态丰富,可以轻松获得各种高质量轮子。这样用户可以专注于业务逻辑,避免重复造轮子。
-
部署
部署简单,源码编译成执行文件后,可以直接运行,减少了对其它插件依赖。不像其它语言,执行文件依赖各种插件,各种库,研发机器运行正常,放到生产环境上,死活跑不起来,需要各种安装和版本匹配。自己的GC
,有defer
功能,函数可以返回多个参数等等。
-
需要把gomobile使用到的数据库mobile.db 复制到Android项目下assets文件夹目录下。
-
把gomobile插件gonet.aar复制到app->
libs目录下。
-
在build.gradle(:app)目录下添加依赖 :implementation (name:gonet,ext:aar)。
-
在android添加如下代码:
android
.......
repositories
flatDir
dirs libs
......
5. 需要在使用gomobile插件前把在assets文件下的数据库mobile.db复制到手机sd卡
private void copyAssetFileToSD()
String fileName = GonetUtil.dbName;
String fileRoot = GonetUtil.dbPath;
String filePath = fileRoot + File.separator + fileName;
File file = new File(filePath);
if ((file.exists() & & file.length() == 0) || !file.exists())
LogUtil.e("fileRoot=path2=" + filePath);
BaseFileUtil.copyAssetData(fileName, fileRoot);
/**
* 拷贝assets目录下的文件
*
* @param assetsFileName assets目录下的文件名
* @param targetPath目标文件夹路径
*/
public static void copyAssetData(String assetsFileName, String targetPath)
new Thread(() ->
try
AssetManager am = UiUtil.getContext().getAssets();
//得到数据库输入流,就是去读数据库
InputStream is = am.open(assetsFileName);
//用输出流写到SDcard上
FileOutputStream fos = new FileOutputStream(new File(targetPath, assetsFileName));
//创建byte数据,1KB写一次
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) > 0)
fos.write(buffer, 0, count);
//关闭
fos.flush();
close(fos);
close(is);
catch (IOException e)
e.printStackTrace();
).start();
3. gomobile上传文件1. 初始化上传管理管理器
/**
* 初始化上传管理类
*/
public static void initUploadManager()
if (mUploadManager == null & & !TextUtils.isEmpty(Constant.scope_token))
UiUtil.starThread(() ->
String headerStr = "\\"scope-token\\":\\"" + Constant.scope_token + "\\"";
mUploadManager = Gonet.newUploadManager(httpUrl, dbPath, headerStr);
mUploadManager.run(headerStr);
);
newUploadManager请求参数解析:
httpUrl:上传服务器地址
dbPath:数据库地址
headerStr:请求头文件
2. 上传文件创建对象
public synchronized static void uploadFile(String filePath, String folderPath, String pwd, UpOrDownloadListener upOrDownloadListener)
if (mUploadManager != null)
UiUtil.starThread(() ->
String fileName = getFileName(filePath);
String url = HttpConfig.uploadFileUrl + folderPath + "/" + fileName;
String headerStr = "\\"scope-token\\":\\"" + Constant.scope_token + "\\"";
mUploadManager.createFileUploader(url, filePath, fileName, headerStr, pwd);
);
createFileUploader请求参数解析:
url:上传服务器地址
filePath:本地文件路径
fileName:文件名称(包括文件后缀)
headerStr:请求头文件
pwd:上传文件需要的密码
3. 开始上传文件
public static void startUpload(long id)
if (mUploadManager != null)
mUploadManager.start(id);
参数解析
id:任务id
4. 暂停上传文件
public static void stopUpload(long id)
if (mUploadManager != null)
mUploadManager.stop(id);
参数解析
id:任务id
5.获取上传文件列表
public static void getUploadList(OnGetFilesListener listener)
UiUtil.starThread(() ->
String jsonData = https://www.songbingjia.com/android/Gonet.getUploadList(dbPath);
Log.e("getUploadList=返回列表json字符串="+jsonData);
);
3.gomobile下载文件1 初始化下载文件管理器
public static void initDownloadManager()
LogUtil.e(TAG + "初始化");
if (mDownloadManager == null & & !TextUtils.isEmpty(Constant.scope_token))
UiUtil.starThread(() ->
String headerStr = "\\"scope-token\\":\\"" + Constant.scope_token + "\\"";
mDownloadManager = Gonet.newDownloadManager(apiUrl, dbPath, headerStr);
mDownloadManager.run(headerStr);
)
newDownloadManager解析
apiUrl:应用服务器api基地址
dbPath:数据库文件夹地址
headerStr:请求头文件
2. 创建下载文件对象
public synchronized static void downloadFile(String filePath, String pwd, UpOrDownloadListener upOrDownloadListener)
if (mDownloadManager != null)
UiUtil.starThread(() ->
String url = HttpConfig.downLoadFileUrl + filePath;
String headerStr = "\\"scope-token\\":\\"" + Constant.scope_token + "\\"";
mDownloadManager.createFileDownloader(url, headerStr, pwd);
);
createFileDownloader解析
url:"/plugin/wangpan/resources"
headerStr:请求头文件
pwd:文件密码
3. 创建下载文件夹对象
public static void downloadFolder(String filePath, String pwd, UpOrDownloadListener startDownListener)
if (mDownloadManager != null)
UiUtil.starThread(() ->
String url1 = HttpConfig.downLoadFolderUrl1; //网络请求地址1
String url2 = HttpConfig.downLoadFolderUrl2; //网络请求地址2
String headerStr = "\\"scope-token\\":\\"" + Constant.scope_token + "\\"";
mDownloadManager.createDirDownloader(url1, url2, filePath, headerStr, pwd)
);
createDirDownloader解析
url1:"/plugin/wangpan/resources/*path"
url2:"/plugin/wangpan/download/*path"
filePath:下载文件夹路径
headerStr:请求头文件
pwd:文件夹密码
4. 开始下载任务
public static void startDownload(long id)
if (mDownloadManager != null)
mDownloadManager.start(id);
5.停止下载任务
public static void stopDownload(long id)
if (mDownloadManager != null)
mDownloadManager.stop(id);
6. 删除下载任务
public static void deleteDownload(long id)
if (mDownloadManager != null)
mDownloadManager.delete(id);
4. 使用插件注意事项1 退出APP需要调用
public static void exitApp()
if (mUploadManager != null)
mUploadManager.quitAPP();
if (mDownloadManager != null)
mDownloadManager.quitAPP();
2 监听网络变化通知
public static void netWorkNotice()
if (mUploadManager != null)
mUploadManager.networkNil();
if (mDownloadManager != null)
mDownloadManager.networkNil();
3 上传域名的更变
public static void changeHost()
String baseUrl = getBaseUrl();
if (mUploadManager != null)
mUploadManager.changeHost(newHost);
if (mDownloadManager != null)
mDownloadManager.changeHost(newHost);
【智汀云盘-开发指南android(文件/文件夹上传下载:gomobile)】
推荐阅读
- Jmeter目录结构及常用元件
- 缓存加速——NoSQL之Redis配置与优化
- python模块
- pvc yaml示例
- 2-27 使用zabbix监控服务器运行状态
- Remi配置Remi镜像源
- Python统计中的68-95-99.7规则
- Python3中级主题快速入门
- Python 3基础快速入门介绍