file:read-binary error
Wednesday, 20 April 2016 · 2 messages
MI
Maud Ingarao20 Apr 2016 13:46 #
Dear friends
We updated 2 days ago from 8.2 to 8.4 and are experiencing a few strange things.
Aside this :
https://github.com/BaseXdb/basex/issues/702#issuecomment-212352923, we discovered that this kind of function doesn't work anymore :
(:~
: resource function for the static files
:
: @param $file file or unknown path
: @return rest response and binary file
:)
declare
%rest:path('/synopsx/files/{$file=.+}')
function synopsx.files:file($file as xs:string) as item()+ {
let $path := $G:FILES || $file
return (
<rest:response>
<http:response>
<http:header name='Cache-Control' value='max-age=3600,public'/>
</http:response>
<output:serialization-parameters>
<output:media-type value='{ synopsx.files:mime-type($path) }'/>
<output:method value='raw'/>
</output:serialization-parameters>
</rest:response>,
file:read-binary($path))
};Response :
HTTP ERROR 400
Problem accessing /synopsx/files/synopsx.js. Reason:
Stopped at /resource/basex/webapp/synopsx/_restxq/files.xqm, 38/10: [SEPM0017] Value of 'method' must be one of (xml,xhtml,html,json,csv,text,adaptive,basex).
------------------------------------------------------------------------ /Powered by Jetty://
/where, on my computer, an exact clone of the webapp runing with a 8.3 works perfectly and sends me my js file as expected.
I read the changelogs but couldn't figure out what could be involved here.
I tried to change "raw" to "adaptive" but then I get a file not found answer :
HTTP ERROR 400
Problem accessing /synopsx/files/synopsx.js. Reason:
Stopped at /resource/basex/webapp/synopsx/_restxq/files.xqm, 50/21: [file:not-found] '/resource/basex/webapp/synopsx/files/synopsx.js' does not exist.
------------------------------------------------------------------------ /Powered by Jetty:///
Thanks :))))
Maud
PS : We're having a showcase with BaseX tomorrow at 4pm :(
--
/« Ne travaillez jamais »/
*Maud Ingarao*
IHRIM - UMR 5317
Institut d’histoire des représentations et des idées dans les modernités Ecole Normale Supérieure de Lyon - Site Descartes - Bureau R322 15 Parvis René Descartes - BP7000 - 69342 Lyon CEDEX 07
+33 4 37 37 65 79 - maud.ingarao at ens-lyon.fr
http://ihrim.ens-lyon.fr
http://institutdesanti.ens-lyon.fr
http://ahn.ens-lyon.fr
CG
Christian Grün20 Apr 2016 13:51 #
Hi Maud,
Sorry for the delay, I’ll soon give you an answer on your other e-mails!
Quoted text · Maud Ingarao · 7 lines
> Response : > HTTP ERROR 400 > Problem accessing /synopsx/files/synopsx.js. Reason: > > Stopped at /resource/basex/webapp/synopsx/_restxq/files.xqm, 38/10: > [SEPM0017] Value of 'method' must be one of > (xml,xhtml,html,json,csv,text,adaptive,basex).
With 8.4, the "raw" output method has become obsolete. Your code should work if you remove the following line:
<output:method value='raw'/>Here is yet another solution for the synopsx.files:file() function, which is a bit more compact:
function synopsx.files:file($file as xs:string) as item()+ {
let $path := $G:FILES || $file
return (
web:response-header(map { 'media-type': web:content-type($path) }),
file:read-binary($path)
)
};Hope this helps, feel free to ask more questions,
Christian
Written for BaseX 8.4. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery