私の研究からサーバーにSVGコンテンツを送信し、それがファイルのダウンロードとして保存するデータを返すことなく、これを行う方法はありません。
しかし、これは、単一のAJAXスタイルの要求を達成することは難しいですし、解決策は驚くほど複雑です。他の人はこれを説明する他の投稿にリンクしていますが、私はすでに同じ回答をしており、どれもそれをとてもうまく説明していません。
JavaScriptを使用SVGコンテンツをシリアル化する:ここで
は私のために働いた手順です。
var svgString = new XMLSerializer().serializeToString(svgElement);
- その
src
提出したURLである隠されたiframe
を作成します。 id
を付けてください。
- 隠しファイル
input
を作成します。このinput
のvalue
をシリアル化されたSVGコンテンツに設定します。
- そのターゲット
id
がiframe
に与えられ、そしてそのaction
提出したURLでフォームを作成します。 の中にinput
を入れてください。
form
を送信してください。
サーバー上では、SVGドキュメントをPNGに変換するために、使用できるツールを使用します(私は.NETを使用していないため、あなた自身でここにいます...)。ヘッダーを使用することを確認して、クライアントにPNGのコンテンツを送信する:
Content-Type:image/png
Content-Disposition:attachment; filename=mypng.png
これはブラウザ - ですが、返されたコンテンツ上のファイルのダウンロードを開始すべきブラウザファイルのダウンロードダイアログを開くのではなく、新しいタブで画像を開くことを選択するブラウザがあります。ここで
は、AJAXの作業を行います(不完全な)機能(jQueryのを使用していますが、あなたのアイデアを得る必要があります)です。あなたはPNGに変換する前に、サーバー上でそれをデコードする必要がありますので、この、SVGコンテンツのURLは、コードすること
function ajaxFileDownload(url, data) {
var iframeId = "uniqueIFrameId"; // Change this to fit your code
var iframe = $("#" + iframeId);
// Remove old iframe if there
if(iframe) {
iframe.remove();
}
// Create new iframe
iframe = $('<iframe src=""' + url + '"" name="' + iframeId + '" id="' + iframeId + '"></iframe>')
.appendTo(document.body)
.hide();
// Create input
var input = '<input type="hidden" name="data" value="' + encodeURIComponent(data) + '" />';
// Create form to send request
$('<form action="' + url + '" method="' + 'POST' + '" target="' + iframeId + '">' + input + '</form>')
.appendTo(document.body)
.submit()
.remove();
}
注:data
は、シリアライズSVGです。
はまた、あなたが外部スタイルシートであなたのSVGのスタイルを定義した場合、彼らはシリアライズされないことに注意してください。私はこの理由から、すべてのスタイルを要素にインラインで入れてpresentation attributesと決めました。
こちらがお役に立てば幸いです。
ブラウザのセキュリティのためにできないはずです。 JavaScriptを使用して同意なしにユーザーのマシンにデータを書き込むことができれば、危険を考えるだけです。 –
同様の質問があります。 このリンクを参照してください http://stackoverflow.com/questions/2483919/how-to-save-svg-canvas-to-local-filesystem – lya
これまで同様の質問があります。 は、参照してください、この1 http://stackoverflow.com/questions/2483919/how-to-save-svg-canvas-to-local-filesystem – lya