Санаев Asked:2020-04-16 05:46:40 +0000 UTC2020-04-16 05:46:40 +0000 UTC 2020-04-16 05:46:40 +0000 UTC 将大文件上传到服务器 772 客户端-服务器应用程序。客户端(手机)向服务器发送一个2GB以上的大文件,客户端可能没电了,但是当手机和应用程序打开时,文件应该继续发送。问题:如何在背面实现? java 3 个回答 Voted Best Answer Arseni Mourzenko 2020-04-16T06:12:15Z2020-04-16T06:12:15Z 如果文件被视为一个流,那么原则上你可以做任何事情,包括部分传输它。思路如下: 该人开始将文件上传到服务器。 下载中断。 一段时间后,此人想要继续发送。客户端询问服务器已经接收了多少字节,只发送剩下的字节。 重要的是服务器必须说明它已经收到了多少字节。客户端发送的字节数在这里并不重要,因为在客户端发送某些内容到服务器将其写下来之间,可能会发生很多不好的事情。 如果客户端是真正的软件,那么我认为一切都清楚了。如果这是一个常规网站,则必须首先在客户端打开该文件,并使用 JavaScript 发送您需要的字节。 在服务器端,开启流式上传是很重要的,否则如果上传中断,服务器将不会写入文件。但我相信如果您正在处理 2 GB 的文件,您已经激活了此功能。 Nick 2020-04-22T16:54:58Z2020-04-22T16:54:58Z 首先,应用程序将文件大小发送给服务器,服务器创建一个指定大小的空文件并为其分配一些 id。 然后应用程序将文件的一部分(例如 1MB)发送到服务器,其中包含文件 id 和从开头开始的偏移量。服务器打开文件,将接收到的块写入正确的位置并记住传输的大小。 重新启动时,应用程序会询问服务器它有多少字节的文件并继续从指定位置分部分传输。 Ramiz 2020-04-24T22:06:13Z2020-04-24T22:06:13Z 可以像Amazon S3 MPU一样完成: 第一次检查 - ListMultipartUploads 如果还没有,请创建 - CreateMultipartUpload 如果是,则检查哪些部件已加载 - ListParts 因此我们上传缺失的部分(可以并行) - UploadPart 加载所有 zasti 后,完成 - CompleteMultipartUpload 或者,如果由于某种原因您需要回滚,我们会中断 - AbortMulipartUpload
如果文件被视为一个流,那么原则上你可以做任何事情,包括部分传输它。思路如下:
重要的是服务器必须说明它已经收到了多少字节。客户端发送的字节数在这里并不重要,因为在客户端发送某些内容到服务器将其写下来之间,可能会发生很多不好的事情。
如果客户端是真正的软件,那么我认为一切都清楚了。如果这是一个常规网站,则必须首先在客户端打开该文件,并使用 JavaScript 发送您需要的字节。
在服务器端,开启流式上传是很重要的,否则如果上传中断,服务器将不会写入文件。但我相信如果您正在处理 2 GB 的文件,您已经激活了此功能。
首先,应用程序将文件大小发送给服务器,服务器创建一个指定大小的空文件并为其分配一些 id。
然后应用程序将文件的一部分(例如 1MB)发送到服务器,其中包含文件 id 和从开头开始的偏移量。服务器打开文件,将接收到的块写入正确的位置并记住传输的大小。
重新启动时,应用程序会询问服务器它有多少字节的文件并继续从指定位置分部分传输。
可以像Amazon S3 MPU一样完成: