1

Apple 已经改变了管理 iWork 文件的方式。这些文件现在是一个包,其内容很像他们的应用程序。我需要创建一个可以接收多个文件的上传表单。主要是图像,但也有一些页面和数字。删除的文件最多可达 15 个,并将使用 PHP 在服务器端进行排序。那已经建好了。

我的问题是。

如何获取要上传的页面文件?到目前为止,我已经尝试了很多预先构建的解决方案。

我也一直在从头开始构建。“dataTransfer”不喜欢它,它说它是一个目录。FileReader 看到它但是当我尝试执行以下操作时

for  (var i = 0; i < items.length; ++i) {
            var entry = items[i].type;

            if (entry == "image/png" || entry.type == "image/jpg" || entry.type == "image/jpeg" ) {
                formData.append("file" + i , items[i]);

            } else {

                var fileReader = new FileReader(); 
                var binary = fileReader.readAsBinaryString(items[i]);
                var blob = new Blob([binary], {type: blob});
                formData.append("file" + i , blob);

它返回未定义并弹出以下错误"failed to load resource blob:http://localhost/<RANDOM BLOB STRING HERE>"

当我解码 blob 服务器端时,不出所料,我得到一个 0Kb 大小的文件,所以它永远不会去。

我真的只想将所有文件放入服务器上的文件夹中。我什至不介意我是否必须尽可能低效地为每个文件发送服务器请求。

我也尝试过 base64 编码,我再次得到类似的结果。我也尝试过 XHR.response “blob”方法。在每种情况下,我都没有得到我的文件,或者我得到了一个损坏的版本。

攻击这个的最好方法是什么?

4

1 回答 1

0

.Pages “文件”是一个包含文件的文件夹。OSX 会将它们显示为单个文件;其他系统可能会将它们视为文件夹。无论哪种方式,其他系统可能无论如何都无法打开它们,

几年前我遇到了这个问题,试图将它们加载到版本控制系统中。我发现最好的解决方法是压缩文件,然后对其进行版本控制。不是很好,但它确实有效。

老实说,最好的解决方案是避免使用.Pages。它并不是一种真正被广泛认可的格式,因此用户可能无论如何都无法打开它。页面可以转换为更易于识别的 Word 或 RTF 格式。

作为旁注,您可能需要非常小心地处理这样的文件(blob)。我没有看到任何阻止某人上传恶意 PHP 脚本或其他有害文件的东西......

于 2014-07-10T15:16:57.240 回答