2016-11-07 2 views
0

Я получаю целый Domino Document сОтображение вложения из Domino службы данных с использованием углового

/API/данные/документы/Unid/

синтаксиса. Я видел, что я получаю в кодировке base64 варианта крепления

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

, и я просто интересно, что будет хорошим способом показать это пользователю с помощью углового - я ищу какое-то директивы загрузки файлов.

У вас есть предложение?

Update:

Ответ на ДДСЕ REST ПОЛУЧИТЬ позвонить в документе фактически возвращает каждое прикрепление в качестве составного массива; Я действительно получил данные в памяти. Мне просто интересно, какой из них будет самым элегантным способом показать пользователю тот факт, что он может «загрузить» одно или несколько вложений.

Это GET вызов, я использую прямо сейчас: http://magermandemo2.ch/Development/handbuch/handbuch1_0/Handbuch_(1_0)_Dev.nsf/api/data/documents/unid/B011CE4D9E3DC16DC1257DAA00718FBB

И домино добавляет это (см прикрепленный файл: Spitzbuben.doc) в конце форматируемом рендеренной-в-HTML:

enter image description here

+0

Я думаю, что вам не нужна загрузка файла, потому что вы хотите отобразить вложение, как загрузку файла. Я столкнулся с такой же проблемой в приложении XPages, что и данные в Cloudant в кодировке base64. Я создал сервлет, чтобы получить код base64 и служить ему в качестве загрузки. Сервлет запускается, когда пользователь хочет загрузить вложение. См. Https://github.com/flinden68/HR-Assistant/blob/master/nsf/Code/Java/ch/belsoft/hrassistant/servlet/AttachmentServlet.java –

+0

Если это только для отображения изображений, вы можете использовать ng -src для рендеринга с использованием uri данных, который указывает на кодированные данные base64. См. Здесь: http://stackoverflow.com/questions/27637449/angularjs-img-ng-src-to-base64-data-not-url-not-working.Если вы хотите создать ссылку на вложение, используйте ng-href и создайте URL-адрес, например/dbpath/0/unid/$ file/filename –

+0

Frank и Mark, большое спасибо за ответы, но я должен был глупо сформулировать свой вопрос - вызов GET для документа возвращает все вложения, закодированные base64, поэтому мне не нужно снова запрашивать сервер для получения той же информации. У меня есть информация в памяти. Я просто хочу отобразить что-то вроде таблицы файлов - нажмите на имя файла, имя файла загрузится (но от памяти к загрузкам, а не от сервера к загрузкам). Или есть лучший способ отображать Rich Text с умеренно хорошим исполнением? Я уже решил встроенные изображения. –

ответ

2

Это был комментарий Фрэнк, который привел к решению. 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://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; 
} 

Вам также нужно явно сказать, что эти URL-адреса данных в порядке и безопасны со следующей настройкой .config:

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

Замечательно, что я мог бы помочь вам указать вас в правильном направлении –

0

Один простой способ загрузить любой файл с сервера, независимо от углового или что-нибудь еще, чтобы иметь URL в теге привязки.

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

Не уверен, что вы авторизованы. Надеюсь, это поможет

Смежные вопросы