1

html5入力フィールドから返されたファイルオブジェクトからパスを取得するにはどうすればよいですか?

基本的に phonegap アプリは、オンラインに接続してサードパーティの Web サイトからサウンド ファイルをダウンロードし、ダウンロードしたファイルを参照してローカル ディレクトリに移動するように設定されています。(1 秒未満の短いサウンド ファイル)。

問題は、ファイル オブジェクトの属性 .fullPath が定義されていないことです。getFile は [object File] 入力ではなく、パス入力を取ります。

次のコードから:

<input style="opacity:0;" type="file" name="soundInput" id="soundInput"/>

<script type="text/javascript" charset="utf-8">
    var soundInput = document.getElementById('soundInput');
    soundInput.addEventListener('change', function(){handleFileSelect(type);}, false);
    soundInput.click();

    function handleFileSelect() {
        var file = this.files[0]; // FileList object
        var type = isThumpy;

        alert("file = " + file.name + "\n full path = " + file.fullPath);

        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
            gotFS(fs,file,type);
        }, fail);
    }

    function fail(error) {
        alert("error " + error.code);
    }

    function gotFS(fileSystem, file, type) {
        alert("got filesystem");
        var flags = {create: false, exclusive: false};
        fileSystem.root.getFile(file, flags, function(fe){
            gotFileEntry(type,fe);
        },fail);
    }

    function gotFileEntry(type, fileEntry) {
        alert("got fileEntry");
        fileEntry.copyTo(path, function(fe){successfulCopy(type, fe);}, fail);
    }

    function successfulCopy(type, fileEntry) {
        alert("copy success");
        setSoundByUri(type, fileEntry.name)
    }
</script>

「ファイルシステムを取得しました」を通過せず、エラー (「エラー」 + error.code) をスローしません。助けてください。

4

1 に答える 1

3

ファイル入力からパス データを取得することはできません。ファイル入力は読み取り専用です。アプローチを変えてみてください。phoneGap fileEntry を使用して新しいファイルを作成し、ファイル入力からデータを書き込みます。

このような:

<script type="text/javascript" charset="utf-8">
function handleFileSelect(type) {
    var file = this.files[0]; // FileList object
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
        gotFS(fs,file,type);
    }, fail);

}

function gotFS(fileSystem, file, type) {
    var flags = {create: true, exclusive: false};
    fileSystem.root.getFile(file.name, flags, function(fe) {gotFileEntry(fe, file, type);}, fail);
}

function gotFileEntry(fileEntry, file, type) {
    fileEntry.createWriter(function(w){gotFileWriter(w, file, type);}, fail);
}

function gotFileWriter(fileWriter, file, type) {
    fileWriter.onwriteend = function(evt){setSoundByUri(type, path + file.name);};
    var reader = new FileReader();
    reader.onload = function(event) {
        var rawData = event.target.result;
        fileWriter.write(rawData);
    };
    reader.onerror = function(event){
        alert("error, file could not be read" + event.target.error.code);
    };
    reader.readAsArrayBuffer(file);
}

function fail(error) {
    alert("error " + error.code);
    if (error.code == FileError.PATH_EXISTS_ERR){
        alert("The file already exists.");
    }
}
</script>
于 2013-07-12T20:06:35.440 に答える