3

blob:blahblahファイルを指すようなブロブURLがあります。このブロブの背後にあるファイルをローカル ファイル システムに書き込みたいと考えています。writer.write()ドキュメントには、(input-type-file からの) ファイル オブジェクトblobを受け入れると記載されています。しかし、これを試すと型の不一致エラーがスローされます

fileEntry.createWriter(function(writer) {
    writer.write(blob); //blob is a var with the value set to the blob url

blobが受け入れられないことが問題であることはわかっていますが、ブロブをファイルシステムに保存する方法を知りたいです。スクリプトの前半で、input-type-file から前述の BLOB を作成し、その値を var に保存しました。

編集

わかりましたので、最初にもっとコードを与えるべきだったと思います。

まず、ブロブ URL を作成し、このように var に保存します

files[i]['blob'] = window.webkitURL.createObjectURL(files[i]);

filesinput-type-file html タグからのもので、i はファイル数だけループされます。あなたはギグを知っています。

次に、変数はいくつかの媒体を通過します。最初にchromeのメッセージパッシングAPIを介して別のページに移動し、次にそのページからワーカーに経由postMessageし、最後に再び親ページにpostMessage戻ります。

最後のページでは、このようにファイル システム API を介して BLOB のファイルをローカル ファイル システムに保存するために使用するつもりです。

//loop code
fileSystem.root.getFile(files[i]['name'], {create: true}, function(fileEntry) {
    fileEntry.createWriter(function(writer) {
        writer.write(files[i]['blob']);
    });
});
//loop code

しかし、writer.writeスローUncaught Error: TYPE_MISMATCH_ERR: DOM File Exception 11

このエラーは、に提供された変数がテキストであり、 (複数のページ/スコープを通過した後ではなく直接) のwriter.writeようなものからの blob オブジェクトではないか、 . では、ブロブの URL を使用してファイルを保存するにはどうすればよいでしょうか。createObjectUrlwindow.WebKitBlobBuilder

4

1 に答える 1

1

編集したコードスニペットと説明から、blobURLをそれ自体ではなくファイルシステムに書き込んでいるように聞こえますFile(たとえばfiles[i]['name']、URL)。代わりに、Fileメインページ->他のページ->ワーカー->メインページの間でオブジェクトを渡します。最近(少なくともChromeでは)、往復が可能になりました。Fileオブジェクトはに渡すことができますがwindow.postMessage()、以前は、ブラウザは引数を文字列にシリアル化していました。

ハンドラー/への参照を「作成」BlobcreateObjectURL()ます。blobURLからに戻る方法は実際にはありませんBlob。つまり、を作成する必要はありませんcreateObjectURL()files[i]直接回るだけです。

于 2011-10-11T16:42:55.140 に答える