问题
我可以成功地实现以下步骤,但用户界面可能会对2MB或更大的文件没有响应。这些文件的大小与用户可能从相机或桌面上传的文件大小相同,所以我需要处理它们。
>
在客户端,我调整了文件的大小,使其宽度小于等于500px(特别是为了减小大文件的图像大小),并显示图像。
在客户端,我上传了大小较小的文件。
演示
看这把小提琴。
在那里你可以看到上传较大文件时,
-
停止移动。这种延迟在Chrome上似乎比Firefox更为显著,但在Firefox上仍然很明显。
堵塞原因
>
当文件数据URL设置在img src上时。这是需要的,以便可以在画布中调整图像的大小。
img。src=e.target。结果//在这里阻塞
当img被写入画布时。这是调整图像大小所必需的。
ctx.draw图像(img,0,0,宽度,高度);//这里阻塞
我考虑过的选择
>
在Web Worker中执行阻塞操作。这是不可能的,因为Web Worker无法操作DOM元素,并且阻塞调用都在操作DOM时发生。
调整Web Worker中原始图像数据的大小。不幸的是,我不知道img的格式是什么,所以调整大小需要处理所有图像类型。我不知道有哪个JavaScript库可以做到这一点,我也不特别想编写自己的跨格式图像压缩库。
直接调整img的大小,但这不会改变需要上传的基础数据大小。
在服务器上调整大小不是一个选项,因为我想减少上传大小。在客户机上调整大小也更好,因为大图像的内存会提前释放,调整大小的图像会立即显示。
其他的想法
我知道设置img src是异步的,所以我猜是数据的复制导致了阻塞。我想知道是否有办法共享相同的数据,而不是复制?
我正在使用我认为是标准的方法,使用
FileReader
获取数据URL,然后将数据URL设置为img。src
和画布。drawImage
来调整大小(这里有很多这样的例子)。如果您能帮助我们提高这种或另一种方法的响应能力,我们将不胜感激。
我想你要做的是
你遇到的问题是,你强迫javascript(客户端)做一些最有可能在服务器端完成的事情。至于以较低的分辨率显示图像,这可以通过使用绘图轻松实现。没有理由立即在客户端向用户显示实际的精简文件。这是我对您的使用流程的版本。
我希望这有帮助!!!
我正在创建教师表单,我想从图库中选择图像作为个人资料,我想用“选择图像”的标签更改右侧“选择图像按钮”的标签和位置 这是html 这是Css
我想使用FormData将图像上传到我的后端,但由于Ionic DEVAPP和Ionic VIEW不支持文件、文件传输和文件上传插件,我只需要使用Angular Http或HttpClient即可。 当使用DestinationType.FILE_URI时,我可以从文件中获取内部url并将其显示在img对象上,但如果没有本机文件、文件路径和文件传输插件,我无法从该url创建打字脚本文件对象。 }
本文向大家介绍input上传文件可以同时选择多张吗?怎么设置?相关面试题,主要包含被问及input上传文件可以同时选择多张吗?怎么设置?时的应答技巧和注意事项,需要的朋友参考一下
问题内容: 控制器: 视图: Javascript: 但是,我得到一个错误 我试图从ajax发布数据和文件,但是它不起作用。我的问题是如何解决该错误?为什么控制器无法读取用户文件的内容? 谢谢 问题答案: 尝试将您的输入内容放入表单并提供id =’your_form_id表单,然后以这种方式在javascript中发送数据: 然后替换这行 有了这个 也设置以下:
问题内容: 我正在使用Chrome驱动程序使用nightwatch.js运行前端测试。我需要测试图像上传是否正常工作,大概是通过提供的文件输入来进行的,因为在成功发布后会运行回调。 我知道可以使用Selenium Web驱动程序的sendKeys方法来完成。 您如何使用javascript和nightwatch.js完成此操作?您可以访问Selenium Webdriver或与其相关的界面吗? 问
问题内容: 我的laravel ajax应用程序出现问题, 我无法通过ajax POST上传图像/文件。 这是我的代码。 阿贾克斯 刀片模板… 控制器.. 路线.. 我的代码有什么错误? 我无法在laravel控制器中获取文件信息。 我该如何解决这个问题…? 问题答案: 有两点要更改: 从以下位置更改您的js文件: 至: 因为您想发送整个表格。 在您的html中: 在文件输入字段中添加名称 至: