gpt4 book ai didi

Java客户端服务器文件同步——最简单的方法

转载 作者:行者123 更新时间:2023-12-04 19:04:35 27 4
gpt4 key购买 nike

我正在尝试向我的 Java 应用程序添加云功能。我需要同步客户端和服务器中的文件。我是 Java 编程的新手,我想听听在这种情况下可用的最佳选择。

我尝试过一些示例项目,例如

http://jfilesync.sourceforge.net/

http://sourceforge.net/p/lazysync

https://github.com/quaa/JavaFileSync

但我对服务器部分真的很困惑。实际上会有很多用户账号,所以我希望我需要创建不同的文件夹来存放不同用户的数据。那么实现这一目标的最佳方法是什么?创建一个 ftp 连接 ?或http上传?

我不确定。任何人都请引导我走上正确的道路。

最佳答案

这在 Web 应用程序中实际上很常见。由于我没有很多具体的工作依据,所以我会给你一些需要考虑的事情和一般性建议。

如果您“自己动手”,那么您不想做的就是将您上传的字节存储到数据库中。这是可能的,但要做好,尤其是在人们可能上传任意大小的文件的情况下,是非常困难的。之前已经解决了这个问题,我会说从最高抽象开始。用户可以上传文件并返回包含文件位置的 URL。因此,用户发布一个文件并返回一个通常为 201/204 的响应,其中包含新文件的 URL。即使您使用的是套接字,我也会考虑基于 HTTP 的方法,这样您就可以将相同的服务推广到多种类型的客户端和平台。但是,您可能可以在套接字中编写非常有效的实现。

对于套接字或 HTTP 请求,以下内容在服务器端是相同的。在服务器端,您有一个接口(interface),例如 FileLocator,它接受一个文件 ID 和一个用户。 FileSystemFileLocator 实现 FileLocator 并将在文件系统上定位文件。棘手的部分是不要在一个目录中放置超过 1,000 个左右的目录或对象。一种常见的技术(如果您为每个文件分配一个唯一的编号)是用零填充并反转数字,这样您就有 12 个数字。每个三位数字 block 成为目录名称,最后 3 位是文件名:/123/400/000/000.pdf。要取回漂亮的文件名,您需要在数据库中跟踪位置、原始文件名和一些元数据。

然后你可以实现S3FileLocator,它使用S3来存储文件。 MongoFileLocator 将数据存储在 mongo 等中。您将面临的挑战是弄清楚如何确保数据库中的元数据(您可以非常快速地访问)与文件系统或 S3 中的实际情况保持同步.

读取文件时只读取文件的小块(如 16k)并在循环中将其返回给用户直到完成。如果一次性读入文件,内存使用效率会很低。例如,在一个项目中,我是一个傻子,通过将文件从 SQL Server 表读取到内存中,然后在内存中复制对象以将其写回客户端来实现这一点。该数据库包含 50 兆字节的 power-point 演示文稿。

关于Java客户端服务器文件同步——最简单的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15189537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com