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

3
我是一名有用的助手,可以为您翻译文本。

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

我已经尝试了一些示例项目,例如:

http://jfilesync.sourceforge.net/

http://sourceforge.net/p/lazysync

https://github.com/quaa/JavaFileSync

但是我对服务器部分真的很困惑。实际上会有许多用户帐户,因此我希望需要创建不同的文件夹来存储不同用户的数据。那么最好的方法是什么? 创建FTP连接? 还是HTTP上传?

我不确定。请任何人将我引导到正确的路径。


什么让你感到困惑?HTTP vs FTP vs plain sockets并不是很重要,只需选择其中一种即可。(尽管我建议避免使用FTP,因为它会使处理防火墙和网络隧道变得更加困难) - Joni
@Joni,感谢你的评论。我喜欢DropBox的概念。那么,通过HTTP实现类似于DropBox的功能是否可能?或者哪个更好? - Ajmal Salim
2个回答

0

最简单的方法是在Dropbox上创建一个帐户,这将为您提供一个公共文件夹。该文件夹可以公开使用,任何用户都可以在没有任何帐户或登录密码的情况下访问。因此,该文件夹成为您的服务器站点或FTP,您不需要服务器代码。现在公共文件夹链接成为您的服务器URL,端口将为80。只需在Dropbox的公共文件夹中为每个用户实现客户端创建单独的文件夹,这将帮助您为每个用户创建不同的URL,以进行自己的数据同步。


0

这在Web应用程序中实际上非常常见。由于我没有太多具体的信息可以使用,我会给你一些思考和一般性建议。

如果您自己开发,不想做的事情是将上传的字节存储到数据库中。虽然可能做到,但特别是在人们可能上传任意大小的文件时,要做好这件事是极其困难的。曾经破解过这个难题,我会建议从最高抽象层开始。用户可以上传文件并返回带有文件位置的URL。因此,用户POST一个文件,并获得通常是带有新文件URL的201/204响应。即使您正在使用套接字,我也会考虑基于HTTP的方法,以便您可以将相同的服务推广到多种类型的客户端和平台。但是,您可能可以在套接字中编写非常有效的实现。

无论是使用套接字还是HTTP请求,在服务器端以下内容都将相同。在服务器端,您有一个接口,例如FileLocator,它需要文件ID和用户。FileSystemFileLocator实现了FileLocator,并会在文件系统上定位文件。棘手的部分是不要将超过大约1,000个目录或对象放入一个目录中。一种常见的技术(如果为每个文件分配唯一编号)是零填充并反转数字,以便您拥有12个数字。每个三位数块成为目录名称,最后3位是文件名:/ 123/400/000/000.pdf。要获取漂亮的文件名,您需要在数据库中跟踪位置、原始文件名和一些元数据。
然后,您可以实现S3FileLocator,它使用S3存储文件。MongoFileLocator用于在mongo中存储数据等。您将面临的挑战是如何确保数据库中的元数据(您可以非常快速地访问)与文件系统或S3中的实际情况保持同步。

在读取文件时,只需读取文件的小块(如16k),并在循环中将这些块返回给用户,直到完成。如果一次性读入整个文件,则会非常低效地使用内存。例如,在我参与的一个项目中,有一个笨蛋将文件从SQL Server表中读入内存,然后在内存中复制对象以将其写回客户端。该数据库包含50兆字节的幻灯片演示文稿。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接