1

ここにセールスフォースフォームが埋め込まれています。このフォームの機能は、ユーザー入力データを私のサイトからsalesforce.comに取得し、そこにデータを保存した後、フォームに渡されたリターンURLを介して私のサイトに戻ることです。

これで、戻るはずのページにファイルのダウンロード機能があります。ファイルは正常にダウンロードされますが、ブラウザのURLはフォームが送信される場所です。フォームが送信された後、ブラウザが自分のサイトに移動し、同時にメッセージを表示しながらファイルをダウンロードするようにしたい。現在、ファイルのダウンロードのみであり、それも空白のページからダウンロードされます。

これで、ダウンロード/ありがとうページから渡すヘッダーは次のようになります。

        header('Content-Type: "'.$mime.'"');
        header('Content-Disposition: attachment; filename="'.$filename.'"');
        header("Content-Transfer-Encoding: binary");
        header('Expires: 0');
        header('Pragma: no-cache');
        header("Content-Length: ".strlen($data));

そして、その後、バッファをフラッシュします:

    ob_clean(); flush(); 
    exit($data);

必要に応じてフォームにアクセスし、情報が不十分な場合はコメントしてください。サイトはまだデバッグモードです。また、私が望むことを達成するために私が何をすべきかについて私を導いてください。

4

2 に答える 2

1

ブラウザが到達する最終的なURLは、ブラウザが理解できるMIMEタイプのドキュメント(例text/html)であるか、理解できないドキュメントです。そうである場合、ブラウザはそれを表示し、アドレスバーに対応するURLを表示します。そうでない場合(たとえばapplication/exe)、ダウンロードしてURLをそのままにします。

ダウンロード中にメッセージを表示する場合は、text/html「ダウンロードがまもなく開始されます」というHTMLページ(MIMEタイプ)を返送してから、JavaScriptを使用してダウンロードを開始する必要があります。

<!DOCTYPE html>

<html>
  <head>
    <title>Downloading your file</title>
  </head>

  <body>
    <h1>Downloading your file</h1>
    <p>Your download will begin shortly</p>

    <script>
        window.setTimeout(
            function() {
                window.location.href = "/mydownload.exe";
            },
            3000 // start download after 3 seconds
        );
    </script>
  </body>
</html>
于 2012-09-04T07:13:44.913 に答える
1

あなたがする必要があるのは、saleforce.comからの「リターン」ページを通常のphpファイル、たとえば、エンドユーザーにHTMLを表示するだけのthankyou.phpにすることです。HTML / JSでは、ダウンロードにリダイレクトすることもできます。このようなもの:

echo "Thank you.  Your file download will start shortly</h2>";
echo "<script type='text/javascript'>window.location = '$filename'</script>";

次に、別のdownload.phpに、上記のコードを配置します。

私はあなたにアイデアを示しているだけであることに注意してください。通常は、(a)HTMLとJSを分離する必要があります。(b)あなたが本当に正しいsalesforce.comページから来て、正しい返品結果を得たことを確認してください。最後に、ページが表示されてから5〜10秒後にダウンロードが開始されるように、遅延を設定することをお勧めします。setTimeoutjavascript関数を確認してください。

于 2012-09-04T07:14:27.073 に答える