3

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

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

http://jfilesync.sourceforge.net/

http://sourceforge.net/p/lazysync

https://github.com/quaa/JavaFileSync

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

我不知道。请任何人引导我走向正确的道路。

4

2 回答 2

0

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

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

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

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

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

于 2013-03-03T19:29:22.953 回答
0

最简单的方法是在保管箱上创建一个帐户,该帐户将为您提供一个公共文件夹。该文件夹可以公开使用,也可以任何用户无需任何帐户或登录密码即可访问。因此,该文件夹成为您的服务器站点或 ftp,您不需要服务器代码。现在公用文件夹链接成为您的服务器 URL,端口将是 80。只需在 dropbox 公用文件夹上实现客户端为每个用户创建单独的文件夹,这将帮助您为每个用户创建不同的 URL。用于自己的数据同步。

于 2014-03-24T13:15:46.887 回答