0

データベースからサーバー上の Excel ファイルにテーブルをエクスポートしてからダウンロードしたいと考えています。以下は、この目的のために開発したコードです。

 import flash.net.FileReference;
 import flash.net.URLRequest;
 public function sqlDownloadExcel():void {
      var http:HTTPService = new HTTPService;
      var parm:Object = new Object;
      var sql:String;

      sql = "insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\\inetpub\wwwroot\\myApp\\App_Data\\myExport.xls;', 'SELECT * FROM [Sheet1$]')  SELECT * FROM myTable";
      parm.sql = sql;
      parm.db = "myDatabase"; 
      http.url = "http://mywebsite.com/SQLconnector/sqlconnector.asp?irand="+Math.random();
      http.showBusyCursor = true;
      http.request = sql;
      http.addEventListener(ResultEvent.RESULT, function(e:ResultEvent):void {sqlDownloadExcelResult(e);});
      http.addEventListener(FaultEvent.FAULT, mssqlFault);
      http.method = "POST"; 
      sqlToken = http.send(parm);
 }
 public function sqlDownloadExcelResult(event:ResultEvent):void{
      var request:URLRequest = new URLRequest("http://mywebsite/myApp/App_Data/myExport.xls");
      var fileRef:FileReference = new FileReference();
      fileRef.download(request);                
 }

コードはサーバー上に Excel ファイルを正しく作成しますが、fileRef.download(request) 関数を実行すると、次のエラーが発生します。

エラー #2176: ポップアップ ウィンドウを表示するアクションなど、特定のアクションは、マウスのクリックやボタンの押下など、ユーザーの操作によってのみ呼び出される場合があります。

アドバイスをいただければ幸いです。ありがとうございました

4

1 に答える 1

1

やりたいことはできません。セキュリティ上の制限により、ユーザーの入力なしにアプリがクライアント マシンに何かをダウンロードしようとするのを防ぎます。そのため、エラーが表示されます。

サーバー上で Excel シートを作成し、それをサーバーに保存してから、URL を Flex アプリに送り返すことをお勧めします。それを開くには、navigateToURL() を使用します。ブラウザは、クライアントのブラウザ設定に基づいてそれを処理する必要があります。自動的にダウンロードされる場合があります。または自動的に開きます。または、ユーザーに何をしたいのかを尋ねるかもしれません。

必要に応じて、生成されたファイルを定期的に消去するサーバー側スクリプトを作成できます。

あなたが提供したコードに基づいて、あなたはその道の 90% にいるようです。FileReference を使用してファイルをダウンロードする代わりに、navigateToURL() を使用してその URLRequest を開きます。

または、UI を変更して、「ファイルの準備ができました。ここをクリックして取得してください」などのメッセージを表示することもできます。次に、ユーザー インタラクションがあり、ユーザーがボタンをクリックした後にダウンロード ウィンドウを開くことができます。

于 2013-03-01T20:27:18.277 に答える