当前位置: 首页 > 知识库问答 >
问题:

从web浏览器上传大文件并传输到AmazonS3

步浩壤
2023-03-14

我们目前有一个小的web应用程序,其中一部分是文件上传。目前,我们在客户端上使用Plupload,并启用了分块功能,以允许上传大型文件。这些文件被保存在应用服务器上,当它们出现时,这些块被追加。

现在,我们正在使用AmazonS3来存储文件,并有可能使用多个应用服务器。我发现很难处理这些大块。我试着以他们为榜样,但我遇到了问题。我尝试的主要内容是这样的:

UploadPartRequest uploadRequest = new UploadPartRequest()
    .withBucketName(bucket).withKey(key)
    .withUploadId(uploadId).withPartNumber(partNumber)
    .withPartSize(bytes.length)
    .withInputStream(new ByteArrayInputStream(bytes));

s3Client.uploadPart(uploadRequest);

我的问题是我需要知道上传的块。当我从上传的初始化中获得initiateMultipartuploadResult时,我就有了它,但是我如何将它与以后出现的块相关联呢?我想我也许可以将它与第一个响应一起发送,然后将它与每个块请求一起发送回去。那似乎不是太远。

然后我发现,为了完成上载,我需要一个列表 ,每次上载到AmazonS3时都会返回partetag。所以,我的下一个问题是,当块从浏览器上传时,如何保存所有这些partetag?我的第一个想法是,我可以在响应中发送每个块的partetag,然后存储这些客户端。我不确定是否有一种方法可以知道最后一个块是什么时候上传的,这样我就可以发送所有这些partetag。如果没有,我只需要每次发送所有我有的,然后只有最后一个请求才会使用它们。这一切对我来说似乎有点怪怪的。

所以,我想一定有人以前处理过这件事。有没有一个好的,标准的方法来做这件事?

我曾想过在应用服务器上构建文件,然后将其发送到S3,但是对于多个应用服务器,这些块不能保证最终会出现在同一个地方。

我的另一个想法是在上传期间将所有这些信息存储在数据库中,但我不确定是否需要在每个块请求中访问数据库。除此之外还有其他选择吗?

共有1个答案

洪越泽
2023-03-14

尝试我们的IaaS解决方案:

https://uploadcare.com

它支持最大5GB的文件大小。下面是一篇关于使用我们的系统上传大文件的成功用例的文章:

 类似资料:
  • 有没有办法通过网络浏览器上传大文件(超过80 Gb)?以前我一直在使用plupload上传文件(img、png、jpg),但它似乎不适用于较大的文件。我也想知道如何实现一个网页,用户可以上传像Mega.co.nz或Drive.google.com。如果使用web开发工具无法做到这一点,有谁能指导我如何划分 谢谢。

  • 问题内容: 是否可以使用ajax将文件从浏览器升级到FTP服务器? 问题答案: 不会。浏览器不提供允许从JavaScript写入FTP的API。 您可以将文件发布到HTTP端点,然后使用服务器端代码将其推送到FTP服务器。

  • 问题内容: 我是一名javascript / java开发人员,我一直在尝试弄清楚seleniumwebdriver自动化框架如何从文件系统上载文件。无法设置通过javascript输入的文件,因为它违反了安全性。但是,webdriver可以通过以下命令执行此操作: 因此,他们通过发送密钥来设置值吗?我不明白 我浏览了以下源代码:http : //code.google.com/p/seleniu

  • 是否可以创建一个html表单,允许Web用户直接将文件上传到azure blob store,而不使用其他服务器作为中介?S3和GAW blob store都允许这样做,但我找不到对azure blob存储的任何支持。

  • 本文向大家介绍跨浏览器拖放HTML文件上传?,包括了跨浏览器拖放HTML文件上传?的使用技巧和注意事项,需要的朋友参考一下 对于跨浏览器的HTML File Uploader,请使用FileDrop。它几乎可以在所有现代Web浏览器上使用。 根据官方规范- FileDrop是一个独立的跨浏览器,用于HTML5,旧版,AJAX,拖放,JavaScript文件上传

  • 问题内容: 我正在开发Web应用程序。用户可以在一个地方使用HTTP协议上传文件。在经典HTML文件上传控件和Java小程序之间可以选择上传文件。 经典的HTML文件上传效果不好,因为您一次只能选择一个文件,并且在实际上传过程中很难获得任何进度指示(我最终使用计时器刷新了进度指示器,并从服务器通过AJAX调用)。优点:始终有效。 随着Java小程序,我可以做更多的事情:选择多个文件一次(甚至一个文