所有文件均可在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.
答案 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">
这对你有帮助吗?