项目需要实现一个 大文件上传 的功能,需要支持 分片上传、断点续传、秒传 等功能,需要满足三端:Android、H5、微信小程序,插件市场上搜了一下,几乎没有满足三端的插件,几乎需要写三套代码,其中看到一位大佬说以“web-view”嵌入网页的形式来做,并且web端项目实现过该功能,感觉这种方式不错,但是实现起来第一步就遇到麻烦了,web-view 载入本地 html 页面只支持 app 形式,难不成为了这个页面单独发布一个地方?
请问大家有什么好的建议呢?
项目需要实现一个 大文件上传 的功能,需要支持 分片上传、断点续传、秒传 等功能,需要满足三端:Android、H5、微信小程序,插件市场上搜了一下,几乎没有满足三端的插件,几乎需要写三套代码,其中看到一位大佬说以“web-view”嵌入网页的形式来做,并且web端项目实现过该功能,感觉这种方式不错,但是实现起来第一步就遇到麻烦了,web-view 载入本地 html 页面只支持 app 形式,难不成为了这个页面单独发布一个地方?
请问大家有什么好的建议呢?
6 回答3k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
2 回答987 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
实现大文件上传功能对于uni-app确实存在一定的挑战,特别是在满足三端(Android、H5、微信小程序)的需求时。首先,你可以考虑使用现有的一些插件,尽管它们可能无法直接满足三端需求,但可以通过修改和扩展实现。以下是一些建议:使用现有插件:虽然市场上的插件可能无法直接满足你的需求,但你可以选择最接近的插件,并对其进行修改和扩展以适应你的项目。例如,你可以尝试使用 uni-file-transfer,它支持分片上传和断点续传。分别实现三端的功能:由于市场上没有满足三端需求的插件,你可以考虑为每个端分别实现上传功能。这可能需要编写三套代码,但可以确保每个端的性能和兼容性。使用web-view嵌入网页:这种方法的确可以实现跨端兼容,但会面临一些限制。例如,如你所提到的,uni-app的web-view对于本地HTML页面的支持仅限于App端。如果你决定使用这种方法,你可以将HTML页面托管在一个Web服务器上,然后在web-view中加载这个URL。这样,你只需要维护一个Web端的上传功能,而不需要为每个端编写单独的代码。以下是一些建议:分别实现三端的上传功能:虽然这可能需要编写三套代码,但可以确保每个端的性能和兼容性。针对Android和H5,你可以使用JavaScript的File API和XMLHttpRequest或Fetch API实现分片上传、断点续传和秒传。对于微信小程序,你可以使用它的wx.uploadFile API,然后在后端处理分片上传和断点续传。使用开源库:有一些开源库可以帮助你实现分片上传、断点续传和秒传,例如Resumable.js和Tus。你可以将这些库集成到你的项目中,但请注意它们可能需要针对uni-app的三端进行适配和修改。考虑使用第三方云存储服务:很多云存储服务(如阿里云OSS、腾讯云COS、七牛云等)已经提供了大文件上传的功能,它们通常支持分片上传、断点续传和秒传。你可以考虑使用这些服务来简化开发过程,并确保文件上传的可靠性和性能。总之,实现uni-app的大文件上传功能可能需要一些一些努力和尝试,但通过选择合适的方法和技术,你应该能够找到满足项目需求的解决方案。以下是一些额外的建议:封装原生模块:对于Android和iOS端,你可以考虑编写原生模块,实现大文件上传功能。然后,将这些原生模块封装为uni-app插件,以便在JavaScript中调用。这样,你可以利用原生平台的性能和API来实现高效的大文件上传。使用条件编译:为了减少重复代码和提高代码的可维护性,你可以使用uni-app的条件编译功能。这允许你在同一个项目中使用特定于平台的代码片段,从而在不影响其他端代码的情况下,实现针对各个平台的优化。后端处理:确保你的后端服务器具有处理大文件上传的能力。这包括支持分片上传、断点续传和秒传等功能。后端应该能够处理并发上传、文件校验和错误恢复等问题。你可以使用现有的开源解决方案,例如tusd和nginx-upload-module,或者根据你的需求编写自定义的后端代码。测试与优化:在实现大文件上传功能后,确保在各个平台上进行充分的测试和优化。这包括测试上传速度、可靠性、容错性和用户体验等方面。根据测试结果,你可能需要对代码进行调整和优化,以确保在不同网络环境和设备上获得良好的性能。综上所述,实现uni-app大文件上传功能需要对多个平台进行适配和优化。你可以选择现有的插件、开源库或云存储服务来简化开发过程,或者为每个端单独编写代码以确保最佳性能和兼容性。无论你选择哪种方法,请确保对上传功能进行充分的测试和优化,以提供良好的用户体验。
使用web-view嵌入网页的方法需要两个主要步骤:一是准备一个支持大文件上传功能的网页;二是在uni-app中使用web-view组件加载该网页。
准备支持大文件上传的网页:
这里我们使用Resumable.js作为示例。首先,在你的Web服务器上创建一个新的HTML文件(如upload.html),并在其中引入Resumable.js库以及编写上传逻辑。
upload.html:
请确保将target属性设置为你的后端服务器接收文件的API端点,并根据需要调整其他配置选项。
在uni-app中使用web-view组件加载网页:
在uni-app项目中,创建一个新页面(如UploadPage.vue),并使用web-view组件加载之前创建的upload.html文件。请将src属性设置为你的Web服务器上托管的upload.html文件的URL。
UploadPage.vue:
请将uploadUrl属性设置为你的Web服务器上托管的upload.html文件的URL。