0

クリックすると、exist-db からローカル ディスクにファイルを保存できるボタンを作成しようとしています。これが私が今持っているものです:

<xf:trigger appearance="xxforms:download" mediatype="application/octet-stream">
    <xf:label>log link</xf:label>
    <xf:action ev:event="DOMActivate">
        <xf:load show="new">
            <xf:resource value="logLink"/>
        </xf:load>
    </xf:action>
</xf:trigger>

logLink には、exist-db 内のファイルへのリンクが含まれています。

<logLink>
    {concat(request:get-scheme(), "://", request:get-server-name(),":", '8080', '/exist/rest/db/zips/Report4.7z')} 
</logLink>

ボタンをクリックすると、ブラウザーはそれを xml ファイルとして開こうとしますが、失敗します。ファイルの保存ダイアログが表示されることを期待していました。ここで何が欠けているか教えてもらえますか?

私も提出を介してそれをやろうとしましたが、成功しませんでした。提出:

<xf:submission id="loadLog" method="post">
    <xf:resource value="concat({$xqueryPath},'serialize.xq')"/>        
</xf:submission>

ボタン:

<xf:trigger appearance="xxforms:download">
    <xf:label>log link</xf:label>
    <xf:action ev:event="DOMActivate">
        <xf:send submission="loadLog"/>
    </xf:action>
</xf:trigger>

クエリ:

let $filename := '/db/horner/zips/Report4.7z'
let $fileurl := 'http://localhost:8080/exist/rest/db/horner/zips/Report4.7z'
(:return file:serialize-binary(util:binary-doc($filename), 'C:\temp\test.7z'):)

return  
    httpclient:get($fileurl, xs:boolean("true"), ())

serialize.xq 自体を実行すると、次のようになります。

<httpclient:response xmlns:httpclient="http://exist-db.org/xquery/httpclient" statusCode="200">
<httpclient:headers>
<httpclient:header name="Date" value="Mon, 04 Jul 2016 14:24:48 GMT"/>
<httpclient:header name="Set-Cookie" value="JSESSIONID=4lvf1wiu5xgph311yol31zkq;Path=/exist"/>
<httpclient:header name="Expires" value="Thu, 01 Jan 1970 00:00:00 GMT"/>
<httpclient:header name="Last-Modified" value="Mon, 04 Jul 2016 09:30:44 GMT"/>
<httpclient:header name="Created" value="Mon, 04 Jul 2016 09:30:44 GMT"/>
<httpclient:header name="Content-Type" value="application/xml"/>
<httpclient:header name="Content-Length" value="2506"/>
<httpclient:header name="Server" value="Jetty(8.1.9.v20130131)"/>
</httpclient:headers>
<httpclient:body mimetype="application/xml" type="binary" encoding="Base64Encoded">N3q8ryccAASdSWz3SAkAAAAAAABiAA.... bla bal bla </httpclient:body>
</httpclient:response>
4

1 に答える 1

1

サーバーのクエリから content-disposition ヘッダーを追加する必要があり、xf:load は正常に機能します。

ヘッダーは次のようになります。

Content-Disposition: attachment; filename="<result.xml>"

eXist-db XQuery で取得する方法は次のとおりです。

let $header := response:set-header('Content-Disposition',  'attachment; filename="result.xml"')
于 2016-07-05T17:28:20.893 に答える