上传到exists-db(控制器问题?)

时间:2017-02-03 00:40:45

标签: exist-db

所有文件均可在http://gist.github.com/tonyahowe - page.html,app.xql,upload.html和form1.html中找到。 appxql中的app:upload函数位于第378行。

我正在尝试向我的应用程序添加上传功能(http://nic.cerosia.org),并且无需将其集成到整个应用程序中即可上传。一旦我集成它,我得到一条400错误消息,包括在下面。我认为问题可能是控制器问题,但我不确定?

我添加了一个从index到upload.html页面的简单链接,如下所示:

<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="templates/page.html" data-template-at="main">
        <form enctype="multipart/form-data" method="post" action="form1.html">
            <fieldset>
                <legend>Upload Document:</legend>
                <input type="file" name="file"/>
                <button id="f-btn-upload" name="f-btn-upload" value="true" type="submit" class="btn btn-danger">Upload</button>
            </fieldset>
        </form>

</div>

将上传文件发送到form1.html,它基本上弄清楚如何处理不同的表单操作(它适用于前两个选项):

<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="templates/page.html" data-template-at="main">
    <div/>
    
    <!-- if a query search -->
    <div data-template="templates:if-parameter-set" data-template-param="query">
        <div data-template="templates:include" data-template-path="search.html" class="col-md-12"/>
    </div>
    
    <!-- if a coursepack search -->
    <div data-template="templates:if-parameter-set" data-template-param="f-btn-coursepack">
        <div data-template="templates:include" data-template-path="coursepack.html" class="col-md-12"/>
    </div>
    
    <!-- if an upload  -->
    <div data-template="templates:if-parameter-set" data-template-param="f-btn-upload">
        <div data-template="templates:include" data-template-path="success.html" class="col-md-12"/>
        <div data-template="app:upload"/>
    </div> 
</div>

应用:上传在这里:

declare function app:upload($node as node(), $model as map(*), $type as xs:string?) {
   
let $collection := '/db/apps/NiC/inReview/'
let $filename := request:get-uploaded-file-name('file')

(: make sure you use the right user permissions that has write access to this collection :)
let $login := xmldb:login($collection, 'public', 'public')
let $store := xmldb:store($collection, $filename, request:get-uploaded-file-data('file'))

return
<results>
   <message>File {$filename} has been stored at collection={$collection}.</message>
</results>

};

我一直在收到一个我认为与控制器有关的错误,但我不确定。任何人都可以帮我找出问题所在?这可能也是一个模板问题?

这是错误:

  

HTTP ERROR 400

     

访问/exist/apps/NiC/works/form1.html时出现问题。原因是:

SAX exception while parsing request: Content is not allowed in prolog.

1 个答案:

答案 0 :(得分:0)

我不确定,但我想知道模板框架是否存在从请求正文中读取数据然后在app:upload函数中无法使用的问题。

我想知道我们是否可以测试它,也许不是检查将在HTTP请求正文中的f-btn-upload,而是可以检查查询字符串参数。如果您将upload.html页面中的表单更改为:

<form enctype="multipart/form-data" method="post" action="form1.html?do-upload=true">

并且form1.html中的切换如下:

 <div data-template="templates:if-parameter-set" data-template-param="do-upload">

这对你有帮助吗?