前言

马上快过年了,提前祝大家新年快乐,今天来写今年最后一篇文章。大家都知道手机自带的文件管理都有一个远程管理文件的功能,都是基于FTP服务实现,只要电脑端和手机端在同一局域网里,就可以访问手机里的文件,但是发现这种FTP远程文件管理有缺点:响应比较慢且整个页面刷新。本文基于Http服务实现一个远程文件管理,局部刷新,前端使用Ajax+H5实现,Android服务端使用AndServer。

实现效果图

PC端:

下载

Android端:

实现关键

  1. 在Android服务端编写两个接口:
  • 即获取SD卡存储目录的文件和目录
 /**     * 返回文件列表     *     * @return     */    @GetMapping(path = "/list")    List<FileInfo> getFileList(@RequestParam(name = "rootPath", required = false) String rootPath) {        File file;        if (TextUtils.isEmpty(rootPath)) {            file = new File(Environment.getExternalStorageDirectory().getAbsolutePath());        } else {            file = new File(rootPath);        }        List<FileInfo> fileInfoList = new ArrayList<>();        if (!file.isDirectory()) {            return fileInfoList;//不能返回空,否则前端收不到数据        }        File[] list = file.listFiles();        if (list == null || list.length == 0) {            return fileInfoList;        }        FileInfo fileInfo;        for (File f : list) {            String name = f.getName();            fileInfo = new FileInfo();            fileInfo.setName(name);            fileInfo.setUrl(f.getAbsolutePath());            fileInfo.setDateModified(f.lastModified());            fileInfo.setDateModifiedString(TimeUtils.formatDateToStr(f.lastModified(), "yyyy/MM/dd aHH:mm:ss"));            if (f.isFile()) {                fileInfo.setIsDir(0);                fileInfo.setSize(f.length());                fileInfo.setSizeString(FileUtils.formatFileSize(f.length()));            } else {                fileInfo.setIsDir(1);            }            fileInfoList.add(fileInfo);        }        return fileInfoList;    }
  • 下载文件的接口
 @PostMapping(path = "/download")    ResponseBody download(HttpResponse response, @RequestParam(name = "rootPath", required = false) String rootPath) {        if (TextUtils.isEmpty(rootPath)) {            return new StringBody("文件路径为空");        }        try {            File file = new File(rootPath);            if (file.isFile() && file.exists()) {                FileBody fileBody = new FileBody(file);                response.setStatus(200);                response.setHeader("Accept-Ranges", "bytes");                response.setHeader("Content-Disposition", "attachment;fileName=" + file.getName());                return fileBody;            } else {                return new StringBody("文件不存在或已经删除");            }        } catch (Exception e) {            Logger.e("下载文件异常:" + e.getMessage());            return new StringBody("下载文件异常:" + e.getMessage());        }    }
  1. 前端请求接口做数据展示和逻辑控制

小结

实现Http服务文件管理器整体不难,难在服务端的实现,非常感谢AndServer的作者,这个框架是基于底层库二次封装,提供了类似SpringMVC的注解接口,使得处理Http请求更简单。该示例还可以进步异步扩展,具体看有实际需求。

项目地址:https://github.com/kellysong/RemoteFileManager

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)Studio 完美修改应用包名
  6. android volley 框架图片请求后有时会导致第一次初始化过慢的原
  7. android 数据储存——SharedPreferences存储(1)
  8. Android(安卓)JNI简介
  9. android 开发错误点滴积累--Asset资源管理

随机推荐

  1. Android获取CPU使用率的几种方式
  2. Android禁止EditText自动弹出软键盘的方
  3. Android的线程使用来更新UI----View的几
  4. Android中的Data Binding初探 (三)
  5. [置顶] Android嵌入式开发
  6. Android(安卓)添加系统服务
  7. Android(安卓)窗口管理
  8. 做一个优秀的Android(安卓)App 应该考虑
  9. github开源Android资源整理(八)工具库
  10. Android中如何使用Intent在Activity之间