新しいFileAPIを使用しても、ファイル入力フィールドまたはドラッグアンドドロップを使用して追加されたファイルのローカルパスにアクセスできないという事実を私はよく知っています。これが良いか悪いか醜いかどうかはここでは問題ではありません。FileAPIの仕様によると、ローカルファイルアクセスは実装されないため、息を止めていません。
しかし、私が次の固定パラメータを使用している状況にあるとしましょう。
- 企業内でのみ使用されるHTML5アプリケーションの開発
- バックエンドに使用される.NET(APIとの相互運用のために必要)
- アプリケーションで使用するブラウザとバージョンを正確に指定/制御できます
- 通常はネットワーク共有にあるが、場合によってはユーザーのワークステーションにローカルにあるファイルにアクセスする必要があります
アクセスとは、ファイルデータにアクセスすることを意味するのではなく、ファイルのローカルパスをサードパーティにフィードすることで、ファイルのドラッグアンドドロップ/選択イベントを他のAPIに中継できるため、サードパーティが取得できるようになります。ファイルに何らかの作業を行います。これは、.NETのOpenFileDialogのようにinput [type = file]フィールドを使用することに例えることができます。つまり、ポイントは、実際のファイルではなく、ファイルパスをアプリケーションにフィードすることです。
箱から出して、これはおそらく不可能だと思います。しかし、私はまた、問題に対する何らかの解決策が必要だと思います。
私がいじっているいくつかのアイデアは次のとおりです。
- 「安全な機能」を許可するためのブラウザ固有の方法の使用
- 可能かどうかわからない-これらの機能のいくつかを使用して無駄に疲れた
- 機能が将来削除される可能性があるため、アプリを特定のバージョンのブラウザに制限します
- Chrome拡張機能のようなものがおそらくトリックを行うことができます
- すべてのディスク上のファイル処理を処理するクライアントコンピューターにローカルにインストールされたある種のコンパニオンアプリケーションを使用し、場合によってはWebSocketなどを使用してHTML5クライアントと通信します。
- 潜在的にかなり厄介な解決策
- おそらく最初はユーザーを少し混乱させるでしょう
- 選択したファイルデータをサーバーに送信し、特定のパスに保存して、この新しいパスをサードパーティに送信します。
- 会社のネットワークを介した大量の送信ファイルを構成し、サイズは約100MB以上になります
- ユーザーが選択したファイルにインプレース変更を加えることはできません
...そしてそれはそれについてです。
おしゃれな提案はありますか?賢明な言葉?便利なリンク?卑劣なコメント?
ありがとう。
編集:これに興味がある人にとっては、以下のjgauffinの提案に従って、Silverlightを使用するのは非常に簡単でした。
Silverlightコードビハインドから(昇格された特権を使用):
private void fileBtn_Click(object sender, RoutedEventArgs e)
{
//prompt file select dialog in Silverlight:
var dlg = new OpenFileDialog();
dlg.ShowDialog();
//call JavaScript method and feed it the file path:
HtmlPage.Window.Invoke("onFileSelected", dlg.File.FullName);
}