智汀云盘-开发指南android:文件/文件夹上传下载:gomobile

Posted 智汀科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智汀云盘-开发指南android:文件/文件夹上传下载:gomobile相关的知识,希望对你有一定的参考价值。


 1.为什么要使用gomobile作为上传下载插件?


  1. 高性能-协程
    golang可以实现跨平台编译,开发出的插件android/OS平台都可以使用,研发人员能少写代码,运维方便维护部署。golang 源码级别支持协程,实现简单。协程使用,当底层遇到阻塞会自动切换,也就是逻辑层通过同步方式实现异步,充分利用了系统资源,同时避免了异步状态机的反人类异步回调,实现方式更为直观简单。golang 协程是通过多线程维护,所以避免不了锁的使用,但也极大解决了研发效率问题。
  2. 生态
    有谷歌做背书,生态丰富,可以轻松获得各种高质量轮子。这样用户可以专注于业务逻辑,避免重复造轮子。
  3. 部署
    部署简单,源码编译成执行文件后,可以直接运行,减少了对其它插件依赖。不像其它语言,执行文件依赖各种插件,各种库,研发机器运行正常,放到生产环境上,死活跑不起来,需要各种安装和版本匹配。自己的 GC,有 defer 功能,函数可以返回多个参数等等。

2.gomobile前期工作


  1. 需要把gomobile使用到的数据库mobile.db 复制到Android项目下assets文件夹目录下。
  2. 把gomobile插件gonet.aar复制到app->libs目录下。
  3. 在build.gradle(:app)目录下添加依赖 :implementation (name:gonet,ext:aar)。
  4. 在android添加如下代码:
android 
.......
repositories
flatDir
dirs libs


......

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件

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);

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_数据库_02


/**
* 拷贝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();

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件_03

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:请求头文件

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_头文件_04

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:上传文件需要的密码

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_头文件_05

3. 开始上传文件

public static void startUpload(long id) 
if (mUploadManager != null)
mUploadManager.start(id);



参数解析
id:任务id

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_头文件_06

4.  暂停上传文件

public static void stopUpload(long id) 
if (mUploadManager != null)
mUploadManager.stop(id);



参数解析
id:任务id

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_头文件_07

5.获取上传文件列表

public static void getUploadList(OnGetFilesListener listener) 
UiUtil.starThread(() ->
String jsonData = Gonet.getUploadList(dbPath);
Log.e("getUploadList=返回列表json字符串="+jsonData);
);

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_数据库_08

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:请求头文件

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_头文件_09

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:文件密码

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_数据库_10

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:文件夹密码

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_头文件_11

4. 开始下载任务 

public static void startDownload(long id) 
if (mDownloadManager != null)
mDownloadManager.start(id);

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件_12

5.停止下载任务

public static void stopDownload(long id) 
if (mDownloadManager != null)
mDownloadManager.stop(id);

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件_13

6. 删除下载任务

public static void deleteDownload(long id) 
if (mDownloadManager != null)
mDownloadManager.delete(id);

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件_14

4. 使用插件注意事项

1 退出APP需要调用

public static void exitApp() 
if (mUploadManager != null)
mUploadManager.quitAPP();

if (mDownloadManager != null)
mDownloadManager.quitAPP();

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件_15

2 监听网络变化通知

public static void netWorkNotice() 
if (mUploadManager != null)
mUploadManager.networkNil();

if (mDownloadManager != null)
mDownloadManager.networkNil();

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_上传文件_16

3 上传域名的更变

public static void changeHost() 
String baseUrl = getBaseUrl();
if (mUploadManager != null)
mUploadManager.changeHost(newHost);

if (mDownloadManager != null)
mDownloadManager.changeHost(newHost);

智汀云盘-开发指南android:文件/文件夹上传下载:gomobile_数据库_17



以上是关于智汀云盘-开发指南android:文件/文件夹上传下载:gomobile的主要内容,如果未能解决你的问题,请参考以下文章

《阿里云盘》电脑端上传文件教程

《阿里云盘》上传视频文件教程

百度云盘上传文件和下载文件慢的解决办法

备忘---上传超过4G大文件到百度云盘方法

开源云盘 Seafile 配置操作

文件拖动上传jsp