美文网首页
Java使用独立文件服务器

Java使用独立文件服务器

作者: V哥带你写程序 | 来源:发表于2021-01-11 22:27 被阅读0次

应用程序中免不了要上传下载文件,实现方式由简单到复杂有很多种:

  1. 最简单的,文件上传后服务端程序将文件写到服务器上一个指定的目录
  2. 稍微复杂一点,我们需要和应用服务器分开的单独文件服务器
  3. 再复杂一点,需要用到分布式文件存储。文件在多个文件服务器之间做冗余备份

使用单独文件服务器

各种方案没有好坏之分,要根据系统场景看是否适用。
第一种方式非常简单,适用于一些访问量小,存储文件不多的应用程序。
多数应用系统其实第二种方案就可以了。
很复杂的采用第三种。

选择独立文件服务要求

  • 有基本的权限控制。不做控制的话,一个爬虫就连锅端了。
  • 使用单独文件服务器。上传下载的压力由文件服务器承担
  • API支持,方便Java程序进行文件存储

Filebrowser + OkHttp 方案

不用自己造轮子。Filebrowser + OkHttp是一个不错的方案。

  • Filebrowser满足上面文件服务的所有要求。Filebrower提供了基于Http的接口让客户端上传下载文件。
  • Java发送Http请求有很多可选方案。JDK自带的库,apache 的 http component, 以及OkHttp开源库。相比之下 OkHttp比较好,主要是API封装得不错,简单易懂,功能全面,效率也不错。实际上在Android程序中OkHttp得到了广泛使用。发送Http请求的任务就靠他了。

实施

Filebrowser安装

按照 Filebrowser的官方安装文档进行安装。
安装完成之后,在浏览器中打开UI, 确认安装正确

filebrowser

写文件服务器工具

此工具的作用是把controller收到的multipart file存储到文件服务器上去。

文件存储助手代码

/**
     * 文件上传
     * @param bytes 文件数据
     * @param storedFileName 文件存储名称
     * @return 上传是否成功
     * @throws IOException
     */
    public boolean upload(byte[] bytes, String storedFileName) throws IOException {
        OkHttpClient httpClient = new OkHttpClient();
        MediaType mediaType = MediaType.Companion.parse("application/octet-stream");
        RequestBody requestBody = RequestBody.Companion.create(bytes, mediaType);
        Request request = new Request.Builder()
                .url(fileServerUrl + "/api/resource/" + storedFileName)
                .post(requestBody)
                .build();
        try(Response response = httpClient.newCall(request).execute()){
            return response.isSuccessful();
        }
    }

Controller代码

    @PostMapping("/upload/boardImg")
    public ApiResp uploadBoardImg(MultipartFile file) throws IOException {
        String storedFileName = FOLDER_NAME_BOARD + SEPARATOR + FileUtils.genUniqueName(file.getOriginalFilename());
        if(fileStorageClient.upload(file.getBytes(), storedFileName)){
            return ApiResp.ok(storedFileName);
        } else {
            return ApiResp.failed("图片上传失败");
        }
    }

这样文件就通过应用服务器上传到单独的文件服务器去了。

查看文件

每个上传的文件在文件服务器上都有一个相对路径。应用系统中只需要存相对路径即可。查看的时候把文件服务器下载API地址和相对路径拼接起来就可以拿到文件了。具体形式为:
http://文件服务器IP/api/download/ + 相对路径

至此,拥有单独文件服务器的文件上传下载就实现了。

Next

下一篇文章,我将介绍如何进一步做权限控制。

相关文章

  • Java使用独立文件服务器

    应用程序中免不了要上传下载文件,实现方式由简单到复杂有很多种: 最简单的,文件上传后服务端程序将文件写到服务器上一...

  • java使用sftp文件服务器

      在工作中,对接第三方服务时,往往存在文件的传输使用,使用stfp是一种简单有效的方式,可以对文件进行上传和下载...

  • java9新特性-10-语法改进:UnderScore(下划线)

    1.使用说明 在java 8 中,标识符可以独立使用“_”来命名: 但是,在java 9 中规定“_”不再可以单独...

  • Android parceable

    java和android分别有独立的序列化数据的方式,在java中通常使用Serializable,而在andro...

  • AWS S3文件服务器

    最近公司用到亚马逊 s3文件服务器,在这里记录一下其使用过程。 1.AWS的创建和访问密钥,凭证的获取 在Java...

  • input上传图片 FormData/base64压缩

    HTML JS 1.不使用文件服务器中专建议使用 FormData 格式提交 2.通过 FileReader() ...

  • Nginx笔记

    基本使用 添加一个静态文件服务器, 并以目录方式呈现

  • java Socket 实现多线程静态文件服务器

    关于静态文件服务器,我觉得博文共赏:Node.js静态文件服务器实战写的不错,简单易懂,思路清晰,不过使用Node...

  • JVM JRE JDK JIT之间的区别

    java虚拟机(JVM) 使用java编程语言的主要优势就是平台的独立性。你曾经想知道过java怎么实现平台的...

  • Redis和Ehcache的区别

    Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵。因为它是独立,所以如果你写个单元...

网友评论

      本文标题:Java使用独立文件服务器

      本文链接:https://www.haomeiwen.com/subject/asjjaktx.html