3

로컬 파일 시스템에 파일을 다운로드 중입니다. fileSystem.root.getFile을 통해 빈 파일을 성공적으로 만들 수 있지만 동일한 경로를 사용하더라도 FILE_NOT_FOUND_ERR로 fileTransfer.download가 실패합니다. //MyDir/test.pdf :PhoneGap FileTransfer.download는 FileSystem과 다른 경로를 제공합니다.

문제는 내 파일이 //sdcard/MyDir/test.pdf에서 만든 (나는 ADB 쉘을 사용하여 확인)하지만 fileEntry이 sdcard에없는 경로 반환되고 있다는 점이다. fileTransfer.download가이 경로와 함께 실패합니다. 상대 경로 MyDir/test.pdf도 실패합니다.

나는 그것이 I (특히, FileTransfer.java에 resourceApi.mapUriToFile 호출이 성공)을 FILE_NOT_FOUND_ERR을 피할 수에 'sdcard에'와 함께 전체 경로를 하드 코딩하지만 나는 CONNECTION_ERR을 얻고 콘솔이 표시되면 "파일 플러그인 대표 할 수 다운로드 경로 ". (FileTransfer.java에서 filePlugin.getEntryForFile 호출은 null을 반환하고 경로에 'sdcard'가 맘에 들지 않는다고 가정합니다.)

fileTransfer.download에서 대상 경로를 지정하는 더 좋은 방법이 있습니까?

var downloadUrl = "http://mysite/test.pdf"; 
var relativeFilePath = "MyDir/test.pdf"; // using an absolute path also does not work 

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 
    fileSystem.root.getFile(relativeFilePath, { create: true }, function (fileEntry) { 
     console.log(fileEntry.fullPath); // outputs: "//MyDir/test.pdf" 

     var fileTransfer = new FileTransfer(); 
     fileTransfer.download(
     downloadUrl, 

     /********************************************************/ 
     /* THE PROBLEM IS HERE */ 
     /* These paths fail with FILE_NOT_FOUND_ERR */ 
     //fileEntry.fullPath,  // this path fails. it's "//MyDir/test.pdf" 
     //relativeFilePath,  // this path fails. it's "MyDir/test.pdf" 

     /* This path gets past the FILE_NOT_FOUND_ERR but generates a CONNECTION_ERR */ 
     "//sdcard/MyDir/test.pdf" 
     /********************************************************/ 

     function (entry) { 
      console.log("Success"); 
     }, 
     function (error) { 
      console.log("Error during download. Code = " + error.code); 
     } 
    ); 
    }); 
}); 

차이점이 있다면 Android SDK 에뮬레이터를 사용하고 있습니다.

+0

시도합니다. 또한 파일을 다운로드하고 저장하려면 다운로드하기 전에 파일을 만드는 것이 중요하지 않습니다. – Regent

+0

@Regent fileSystem.root.fullPath는'/'이므로 도움이되지 않습니다. – Keith

답변

12

파일 경로에 대한 URI를 사용하여이 문제를 해결할 수있었습니다. (나는 또한 @ 리젠트의 코멘트 당 fileSystem.root.getFile에 불필요한 호출을 제거했습니다.) "fileSystem.root.fullPath + '/'+ relativeFilePath"로 대상 파일 이름을 대체 할

var downloadUrl = "http://mysite/test.pdf"; 
var relativeFilePath = "MyDir/test.pdf"; // using an absolute path also does not work 

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) { 
    var fileTransfer = new FileTransfer(); 
    fileTransfer.download(
     downloadUrl, 

     // The correct path! 
     fileSystem.root.toURL() + '/' + relativeFilePath, 

     function (entry) { 
     console.log("Success"); 
     }, 
     function (error) { 
     console.log("Error during download. Code = " + error.code); 
     } 
    ); 
}); 
+1

감사합니다. 내게 많은 도움이되었습니다. :) – ConnectingCode

+0

위 코드를 수행했지만 여전히 FileTransferError..CONNECTION_ERR을 받았습니다. 나는 그 장치에서 달리고있다. https://jsfiddle.net/desmond80in/zamh9qLL/1/ – Desmond