我正试图在我的java应用程序中添加一个云功能。我需要同步客户端和服务器中的文件。我是java编程的新手,我想知道在这种情况下最好的选择是什么。
我已经尝试了一些示例项目,比如
http://jfilesync.sourceforge.net/
http://sourceforge.net/p/lazysync
https://github.com/quaa/JavaFileSync
但我真的对服务器部分感到困惑。实际上将有许多用户帐户,所以我希望我需要创建不同的文件夹来存储不同用户的数据。那么,实现这一目标的最佳方法是什么呢?创建ftp连接?或者http上传?
我不确定。任何人请给我指引正确的道路。
发布于 2013-03-04 03:29:23
这实际上在Web应用程序中非常常见。因为我没有太多的细节可做,所以我会给你一些需要思考的东西和一般性的建议。
如果你“滚你自己的”,你不想做的事情是将你上传的字节存储到数据库中。这是可能的,但做好它,特别是在人们可能上传任意大小的文件的情况下,是极其困难的。我之前已经解决了这个问题,我会说从最高的抽象开始。用户可以上传文件,并返回带有文件位置的URL。因此,用户发布一个文件并返回一个响应,该响应通常是201/204,其中包含新文件的URL。即使您正在使用套接字,我也会考虑基于HTTP的方法,这样您就可以将相同的服务推出到多种类型的客户端和平台。但是,您可能会在套接字中编写一个非常有效的实现。
无论是套接字还是HTTP请求,服务器端的情况都是一样的。在服务器端,您有一个接口,比如FileLocator,它接受一个文件id和一个用户。FileSystemFileLocator实现FileLocator,并在文件系统上定位该文件。棘手的部分不是在一个目录中放置超过1,000个左右的目录或对象。一种常见的技术(如果您为每个文件分配一个唯一的编号)是对数字进行零填充和反转,这样您就有12个数字。每个三位数的块都会变成一个目录名,最后三位是文件名: /123/400/000/000.pdf。为了找回漂亮的文件名,您需要跟踪数据库中的位置、原始文件名和一些元数据。
然后,您可以实现使用S3存储文件的S3FileLocator。你将面临的挑战是如何确保数据库中的元数据(你可以非常快速地访问)与文件系统或S3中的实际情况保持同步。
在读取文件时,只读取文件的一小部分(如16k),然后循环将这些文件返回给用户,直到读取完成。如果你一次读入所有的文件,你将会非常低效地使用内存。例如,在我参与的一个项目中,我通过将SQL Server表中的文件读取到内存中,然后在内存中复制对象以将其写回客户端来实现这一点。该数据库包含50兆字节的power-point演示文稿。
发布于 2014-03-24 21:15:47
最简单的方法是在dropbox上创建一个帐户,这将为您提供一个公共文件夹。该文件夹可以公开使用,或者任何用户无需任何帐户或登录密码即可访问。因此该文件夹将成为您服务器站点或ftp,且您不需要服务器代码。现在,公共文件夹链接将成为您的服务器URL,端口将为80。只需在dropbox公共文件夹上实现客户端为每个用户创建单独文件夹,这将帮助您为每个用户创建不同的URL。用于他们自己的数据同步。
https://stackoverflow.com/questions/15189537
复制相似问题