2014-07-10 6 views
1

Apple은 iWork 파일을 관리하는 방식을 변경했습니다. 이제 파일은 Apps와 매우 유사한 콘텐츠가 포함 된 번들입니다. 여러 파일을받을 수있는 업로드 양식을 만들어야합니다. 주로 이미지이지만 일부 페이지와 숫자도 있습니다. 삭제 된 파일의 수는 최대 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>"

을 내가 블롭 서버 측을 디코딩 할 때, 당연히 내가 그렇게 0KB 크기의 파일을 가져 그 절대 가지마.

정말 모든 파일을 서버의 폴더로 가져오고 싶습니다. 파일 당 서버 요청을 비효율적으로 보내야 할지도 모르겠다.

나는 또한 base64 인코딩을 시도하고 또 비슷한 결과를 얻습니다. 나는 또한 XHR.response "blob"메서드도 시도했다. 각각의 경우에 파일을 가져 오지 않거나 손상된 버전이 표시됩니다.

이것을 공격하는 가장 좋은 방법은 무엇입니까?

답변

0

. 페이지 "파일"은 파일이있는 폴더입니다. OSX는 그것들을 하나의 파일로 표시 할 것입니다; 다른 시스템에서는 폴더로 보게됩니다. 어쨌든 다른 시스템에서는 어쨌든 열 수 없습니다.

몇 년 전에 버전 제어 시스템에로드하려고 시도한이 문제가 발생했습니다. 가장 좋은 방법은 파일을 지우고 버전을 제어하는 ​​것입니다. 훌륭하지 않지만 작동했습니다.

최상의 해결책은 솔직히 .Pages를 피하는 것입니다. 실제로는 잘 알려진 형식이 아니므로 사용자가 어쨌든 열 수는 없습니다. 페이지는 인식 된 Word 또는 RTF 형식으로 변환 할 수 있습니다.

부수적으로, (blob)과 같은 파일을 처리 할 때는 매우주의해야 할 수 있습니다. 나는 누군가가 악의적 인 PHP 스크립트 또는 다른 유해한 파일을 업로드하는 것을 막는 것을 보지 못했습니다 ...

+0

동의하지만 고통이 있습니다. 업로드 전에 사용자가 압축하는 사용자 워크 플로에 단계를 추가하는 것도 옵션이 아닙니다. 이 파일 서버 측을 얻는 방법이 있어야합니다. –

+0

@GlennHolland 아마도 이것이 전체 디렉토리 (거기에 몇 가지 자바 스크립트 도구가 있음)를 업로드하고 서버에 압축하는 것보다 내부 도구 (보안은 큰 문제가 아님)입니까? – Jason