我正在为一些客户构建基于PHP的上传服务。我正在使用SWFUpload,以便我可以在上传时查看文件的进度。我已经很好地构建了它,但是在我们向公众发布它之前我遇到了最后一个问题。
我们的许多(几乎所有)客户都是基于Mac的,并且正在上传包含InDesign文件,字体,Illustrator文件等的文件集。大多数时候图像文件都可以,但偶尔(并且总是使用Type) 1字体)文件将因为丢失资源分叉而损坏。
我理解为什么会这样(从多叉系统转移到单叉系统),但我找不到任何优雅的解决方案。在我的研究中,到目前为止我找到的最佳答案是“让用户压缩它”。我知道这很有效,但我们客户认为,要求他们压缩他们要发送的每一组文件都是不合理的。
有没有更好的解决方案来保持这些资源叉活着?当然,我更喜欢直接javascript / php的解决方案,但是会选择基于flash或(最不优选)基于java的东西。
我对新解决方案的唯一要求是:
以下是有关我的系统的一些信息
答案 0 :(得分:6)
上传句柄文件。如果浏览器和底层操作系统无法在此过程中处理分支(将任何文件映射到文件模型以进行上载),那么您将受到系统架构所获得的限制。
Resource fork:资源分支是Mac OS操作系统的构造,用于将结构化数据存储在文件中,以及存储在数据分支中的非结构化数据。资源分叉以特定形式存储信息,例如图标,窗口形状,菜单及其内容的定义以及应用程序代码(机器代码)。
如果那是你的阻挡者,你可能选择了错误的字段来工作。只是说,如果你遇到系统的边界,你可以做的事情就不多了。即使你为图形设计师和mac用户工作。
swfupload would need a feature to deal with forks。为此,flash would need a feature to deal with forks。那个the browser would eventually need a feature to deal with forks。等等。
在这个链条的旁边,还有另一个问题:如何处理货叉?由于上传只将一个文件映射到一大块二进制数据,如何映射fork也是如此?附加吗?添加其他文件?
所以在技术层面上这听起来并不容易解决。文件输入链中的所有组件和系统都必须支持通常根本不支持的功能。
因为您无法向不存在的用户提供某些内容,您唯一能做的就是让您的应用程序更加实用或用户友好。例如。通过在正确的时间提供正确的音符(例如,当用户选择用于上载的类型1文件时,以提醒他/她也选择分叉)。与用户沟通可以提供帮助,但请记住,用户需要使用他/她理解的语言进行交流。
因此,如果您知道某些文件类型有分叉,请将问题告诉可以解决问题的人:用户。你不能。
答案 1 :(得分:0)
您不必使用swfupload来监控进度。
以下是一些证明这一点的文件:https://github.com/senica/Booger/tree/master/assets/js/jquery-upload
它没有很好地记录,但它基本上使用webkitSlice函数来上传javascript中的文件。您可以使用回调函数来显示文件的进度。
这将是一个javascript / php解决方案。