2014-07-10 27 views
1

蘋果已經改變了它管理iWork文件的方式。這些文件現在是一個包含內容非常像他們的應用程序。我需要創建一個可以接收大量文件的上傳表單。主要是圖像,但也有一些頁面和數字。丟棄的文件最多可以編號爲15,並將使用PHP對服務器端進行排序。這已經建成。如何上傳iWork Pages 5.2文件。

我的問題是。

我該如何獲取要上傳的頁面文件?到目前爲止,我已經嘗試了很多預製解決方案。

我也一直在從頭開始建設。 「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); 

則返回undefined並彈出以下錯誤"failed to load resource blob:http://localhost/<RANDOM BLOB STRING HERE>"

當我解碼團塊服務器端,勿庸置疑我得到瀏覽次數大小,使文件的永不去。

我真的只想把所有的文件放到服務器上的一個文件夾中。我甚至不介意我是否必須發送每個文件的服務器請求,儘可能低效。

我也嘗試了base64編碼,並再次得到類似的結果。 我也嘗試過XHR.response「blob」方法。在每種情況下,我都沒有收到我的文件,或者收到損壞的版本。

攻擊這個的最好方法是什麼?

回答

0

。頁面「文件」是包含文件的文件夾。 OSX會將它們顯示爲單個文件;其他系統可能會將它們視爲一個文件夾。無論哪種方式,其他系統可能無法打開它們,

幾年前我遇到了這個問題,試圖將它們加載到版本控制系統中。我發現最好的解決辦法是壓縮文件,而不是版本控制。不是很好,但它確實有效。

最好的解決方案,坦率地說,就是避免.Pages。它不是一個真正被廣泛認可的格式,所以用戶可能無法打開它。頁面可以轉換爲更可識別的Word或RTF格式。

作爲一個方面說明,你可能想要非常小心地處理這樣的文件(blob)。我沒有看到任何東西阻止某人上傳惡意的PHP腳本或其他有害文件...

+0

同意這是一種痛苦,但我受它的約束。並且在上傳之前在用戶工作流中添加一個壓縮步驟也不是一個選項。必須有一種方法來獲得這個文件服務器端。 –

+0

@GlennHolland如果這是一個內部工具(並且安全性不是很大的擔憂),那麼可能需要上傳整個目錄(有一些Javascript工具)並將其壓縮到服務器上? – Jason