使用 angular 显示来自 Domino 数据服务的附件
Showing attachments from Domino Data Service using angular
我正在使用
获取整个 Domino 文档
/api/data/documents/unid/
语法。我已经看到我得到了附件的 base64 编码版本
"contentType": "application/octet-stream; name=\"Spitzbuben.docx\"",
我只是想知道使用 angular 向用户显示此内容的好方法是什么 - 我正在寻找某种文件上传指令。
你有什么建议吗?
更新:
对文档的 DDS REST GET 调用的响应实际上 returns 每个附件作为一个多部分数组;我实际上已经在内存中获取了数据。我只是想知道向用户显示他可以 'download' 一个或多个附件这一事实的最优雅方式是什么。
这是我现在使用的 GET 调用:
http://magermandemo2.ch/Development/handbuch/handbuch1_0/Handbuch_(1_0)_Dev.nsf/api/data/documents/unid/B011CE4D9E3DC16DC1257DAA00718FBB
并且 domino 在 rich-text-rendered-into-HTML:
的末尾添加了这个(见附件:Spitzbuben.doc)
从服务器下载任何文件的一种简单方法,无论 angular 或其他任何内容,都是在锚标记中添加 URL。
<a target="_self" href="example.com/uploads/Spitzbuben.docx" download="Spitzbuben.docx">
不确定您的授权内容。希望这有帮助
弗兰克的评论导致了解决方案。 RFC 2397 定义了一个 'data-url' 方法,使您可以直接将数据放入 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://www.rfc-editor.org/rfc/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 设置明确说明这些数据 url 正常且安全:
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|data):/);
我正在使用
获取整个 Domino 文档/api/data/documents/unid/
语法。我已经看到我得到了附件的 base64 编码版本
"contentType": "application/octet-stream; name=\"Spitzbuben.docx\"",
我只是想知道使用 angular 向用户显示此内容的好方法是什么 - 我正在寻找某种文件上传指令。
你有什么建议吗?
更新:
对文档的 DDS REST GET 调用的响应实际上 returns 每个附件作为一个多部分数组;我实际上已经在内存中获取了数据。我只是想知道向用户显示他可以 'download' 一个或多个附件这一事实的最优雅方式是什么。
这是我现在使用的 GET 调用: http://magermandemo2.ch/Development/handbuch/handbuch1_0/Handbuch_(1_0)_Dev.nsf/api/data/documents/unid/B011CE4D9E3DC16DC1257DAA00718FBB
并且 domino 在 rich-text-rendered-into-HTML:
的末尾添加了这个(见附件:Spitzbuben.doc)从服务器下载任何文件的一种简单方法,无论 angular 或其他任何内容,都是在锚标记中添加 URL。
<a target="_self" href="example.com/uploads/Spitzbuben.docx" download="Spitzbuben.docx">
不确定您的授权内容。希望这有帮助
弗兰克的评论导致了解决方案。 RFC 2397 定义了一个 'data-url' 方法,使您可以直接将数据放入 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://www.rfc-editor.org/rfc/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 设置明确说明这些数据 url 正常且安全:
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|data):/);