2012-02-15 5 views
0

html5 javascriptを使用すると、ユーザーがファイルを選択するとどのようにファイルパスを取得しますか? この例の場合に使用するファイルパスが必要です:html5ファイルパスを取得

ユーザーはファイルをアップロードして一時停止します(これまでのところ私はmozillaだけがこれを行うことができると知っています)。その後、ブラウザを閉じてファイルを再開します翌日。このファイルのファイルパスを知る必要があります。

+1

とにかくファイルアップロードを再開することはできません。 – ceejayoz

+0

java以外のファイルアップロードをreiiniateできる他のプログラミング言語があります。 – Harts

+0

これを行うことができるものは何らかのプラグインが必要です。 – ceejayoz

答えて

8

パスがあっても(いくつかのブラウザーがあなたに渡していました)、タイプファイルの入力のパスを設定する方法はありません。

したがって、プレーンなJSとDOMでは必要なことを行うことはできません。

私はそれは不可能だと言ったが、新しいFile APIを使って方法があると私は思った。次のステップは、何をする必要があるかを概説していますが、テストされたことはありません。私はそれがうまくいくとは思っていません。あなたに道を見せるだけでなく、グローバル変数も悪いです。 。ユーザーがファイルを選択したら、ここでの例との良好なページでは、型ファイルの入力を必要とするhttp://www.html5rocks.com/en/tutorials/file/dndfiles/

最初のファイルのAPIを使用してですが、その後、あなたが使用することができます、あなたはFileオブジェクトへのアクセス権を与えられています。 http://dev.w3.org/2006/webapi/FileAPI/#dfn-filereader

<input type="file" id="files" name="files[]" multiple /> 
<script> 
    var fileBlobs = []; 
    function handleFileSelect(evt) { 
    var files = evt.target.files; // FileList object 

    // files is a FileList of File objects. You may now read their contents 
    var reader = new FileReader(); 
    for (var i = 0, f; f = files[i]; i++) { 
     fileBlobs.push(reader.readAsBinaryString(f)); 
    } 
    }  
    document.getElementById('files').addEventListener('change', handleFileSelect, false); 
</script> 

セカンド今、あなたはバイナリ文字列としてコンテンツを持っています。あなたは、あなたが後でしてFileWriterとFileSaverインタフェースhttp://dev.w3.org/2009/dap/file-system/file-writer.html

あなたはAjaxリクエストをサーバーにそのブロブを渡すようにする必要があり
var bb = new BlobBuilder(); 
bb.appendfileBlobs.(fileBlobs[0]); 
window.saveAs(bb.getBlob(), "test_file"); 

サードを使用してアクセスできるような方法でファイルをローカルに保存するため、ファイルAPIを使用することができますどのくらいのアップロードが完了したかを追跡します。 http://www.w3.org/TR/XMLHttpRequest/#the-upload-attribute。追跡の進捗状況がクライアント上で実行できるように見えません。あなたは実際の進歩についてサーバーをポーリングする必要があります。中断されたアップロードをどこで開始するかを知るための解決策は、アップロードIDを持たせることです。アップロードを再開すると、アップロードされたファイルの量がサーバーに問い合わせられます。

申し訳ありませんが完全な答えを提供することはできませんが、これは簡単な問題ではありません。私があなたに与えた措置はあなたを正しい方向に連れて行かなければなりません。

+0

@JuanMendes ..とにかくこの一時停止/再開機能をJava/Flashを使用する以外には何かしていますか?私はHTML5にFileAPIがあると思ったので、私たちはhtmlでそれをやることができると思った。 – Harts

+0

@ user1096900私の改訂版の回答を見てください。 –

0

HTTPリクエストを数日かけて送信できないような場合は、ファイルアップロードでもHTTPリクエストを送信できません。プロトコルでは許可されません。したがって、全力を尽くすのは無駄です。

+0

しかし、私たちはそれをトリックすることができますか? html5 File APIからのスライスを使用して、部分ごとにアップロードする – Harts

+0

HTML5はこれまでどおりに強力で、HTTPの指示を上書きすることはできません。プロトコルは、クライアントではなくサーバーによって設定されます。 –

0

私が知る限り、Javascriptはfile入力またはドラッグアンドドロップによって共有されたファイルにしかアクセスできないため、これは不可能です。

関連する問題