使用angular显示Domino Data Service的附件

时间:2016-11-07 16:38:57

标签: angularjs xpages lotus-domino

我正在使用

获取整个Domino文档

/ API /数据/文档/ UNID /

语法。我已经看到我得到了附件的base64编码版本

"contentType": "application/octet-stream; name=\"Spitzbuben.docx\"",

我只是想知道使用angular向用户显示这个的好方法 - 我正在寻找某种文件上传指令。

你有什么建议吗?

更新

对文档的DDS REST GET调用的响应实际上将每个附件作为多部分数组返回;我实际上已经将数据存储在内存中了。我只是想知道哪种最优雅的方式向用户显示他可以“下载”一个或多个附件的事实。

这是我现在正在使用的GET电话:    http://magermandemo2.ch/Development/handbuch/handbuch1_0/Handbuch_(1_0)_Dev.nsf/api/data/documents/unid/B011CE4D9E3DC16DC1257DAA00718FBB

domino在富文本渲染到HTML的末尾添加了这个(参见附件:Spitzbuben.doc):

enter image description here

2 个答案:

答案 0 :(得分:2)

弗兰克的评论导致了解决方案。 RFC 2397定义了一种'data-url'方法,可让您直接将数据放入网址。

这是HTML:

  <div class="panel panel-default" ng-if="attachments">
    <div class="panel-heading">Attachments</a></div>
    <div class="list-group">
        <a ng-repeat="attachment in attachments" class="list-group-item" download="{{attachment.filename}}"
           ng-href="{{attachment.dataurl}}">{{attachment.filename}}</a>
    </div>
</div>

以下是加载附件的指令部分(可以是数组:)

   dataService.loadSingleDocumentbyUNIDMultiPart(unid).then(function (data) {
    var receiveddata = angular.fromJson(data);

if (receiveddata.Body) {
    scope.attachments = [];
    var newVal = receiveddata.Body;
    if (newVal) {

        if (mimeObj.contentDisposition) {
            //example:   "contentDisposition": "attachment; filename=\"Spitzbuben.docx\"",
            var regex = /attachment; filename=\"(.*)\"/;
            var match = regex.exec(mimeObj.contentDisposition);
            if (match) {
                // example:  "contentType": "application/octet-stream; name=\"Spitzbuben.docx\"",
                var mediatype = mimeObj.contentType.substring(0, mimeObj.contentType.indexOf(";"));

                // https://tools.ietf.org/html/rfc2397 dataURL definition
                var thisAttachment = {
                    "filename": match[1],
                    "dataurl": "data:" + mediatype + ";base64" + "," + mimeObj.data
                };
                scope.attachments.push(thisAttachment);
            }
        }
    }
} else {
    // the body has not been received so we clean stuff u
    scope.attachments = null;
}

您还需要使用以下.config设置明确说明这些数据网址是否正常且安全:

$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|data):/);

答案 1 :(得分:0)

从服务器下载任何文件的一种简单方法,无论是角度还是其他任何内容,都要在锚标记中包含URL。

<a target="_self" href="example.com/uploads/Spitzbuben.docx" download="Spitzbuben.docx">

不确定您的授权内容。希望这有帮助