Добавление вложения в Azure CosmosDB - PullRequest
0 голосов
/ 22 мая 2018

Мне нужна помощь по добавлению вложения на CosmosDB.Вот небольшой фон.

Наше приложение в настоящее время работает в IBM Bluemix, и мы используем CloudantDB.Мы используем CloudanDB для хранения вложений (файл PDF).Мы не переходим на службу приложений Azure PaaS и планируем использовать CosmosDB.Я ищу помощь о том, как создать вложение на CosmosDB с помощью Java API.Какой API мне нужно использовать?Я хочу сделать небольшой POC.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Какой клиентский API я могу использовать?

Вы можете присоединиться к cosmos db java sdk к приложению CRUD.

import com.microsoft.azure.documentdb.*;
import java.util.UUID;

public class CreateAttachment {

    // Replace with your DocumentDB end point and master key.
    private static final String END_POINT = "***";
    private static final String MASTER_KEY = "***";

    public static void main(String[] args) throws Exception, DocumentClientException {

        DocumentClient documentClient = new DocumentClient(END_POINT,
                MASTER_KEY, ConnectionPolicy.GetDefault(),
                ConsistencyLevel.Session);

        String uuid = UUID.randomUUID().toString();
        Attachment attachment = getAttachmentDefinition(uuid, "application/text");

        RequestOptions options = new RequestOptions();

        ResourceResponse<Attachment> attachmentResourceResponse = documentClient.createAttachment(getDocumentLink(), attachment, options);

    }

    private static Attachment getAttachmentDefinition(String uuid, String type) {
        return new Attachment(String.format(
                "{" +
                        "  'id': '%s'," +
                        "  'media': 'http://xstore.'," +
                        "  'MediaType': 'Book'," +
                        "  'Author': 'My Book Author'," +
                        "  'Title': 'My Book Title'," +
                        "  'contentType': '%s'" +
                        "}", uuid, type));
    }
}

В документации сказано, что общий размер файла, который мы можем сохранить, составляет 2 ГБ.«Azure Cosmos DB позволяет хранить двоичные двоичные объекты / носители с помощью Azure Cosmos DB (максимум 2 ГБ на учетную запись)» Это максимум, который мы можем хранить?

Да. Размер вложенийограничено в документе дб.Однако существует два способа создания вложения документа Azure Cosmos DB.

1. Сохраните файл как вложение к документу

Необработанное вложение включено кактело ПОСТ.Необходимо установить два заголовка:

Slug - Имя вложения.contentType - задайте MIME-тип вложения.

2. Сохраните URL-адрес файла в приложении к документу

Тело для POST включает в себяследующий.

id - это уникальное имя, которое идентифицирует вложение, то есть никакие два вложения не будут иметь одинаковый идентификатор.Идентификатор не должен превышать 255 символов.Мультимедиа - это URL-ссылка или путь к файлу, в котором находится вложение.

Ниже приведен пример

{  
    "id": "device\A234",  
    "contentType": "application/x-zip-compressed",  
    "media": "www.bing.com/A234.zip"  
}

Если ваши файлы превышают ограничения, вы можете попытаться сохранить их со вторымпуть.Более подробную информацию см. В blog .

Кроме того, вы могли заметить, что приложения cosmos db поддерживают механизм сбора мусора, он обеспечивает сбор мусора при удалении всех ожидающих ссылок..

Надеюсь, это поможет вам.

0 голосов
/ 22 мая 2018

Лично я чувствую, что в Azure, если вы захотите поместить файлы в documentDb, вы заплатите высокую цену за запрос.Вместо этого обычной практикой будет использование BLOB-объекта Azure и сохранение ссылки в поле, а затем возвращение URL-адреса, если это общедоступные или двоичные данные, если вы хотите, чтобы он был защищен.

Однако вы можете сохранить его, используя

var myDoc = new { id = "42", Name = "Max", City="Aberdeen" }; // this is the document you are trying to save
var attachmentStream = File.OpenRead("c:/Path/To/File.pdf"); // this is the document stream you are attaching

var client = await GetClientAsync();
var createUrl = UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName);
Document document = await client.CreateDocumentAsync(createUrl, myDoc);

await client.CreateAttachmentAsync(document.SelfLink, attachmentStream, new MediaOptions()
    {
        ContentType = "application/pdf", // your application type
        Slug = "78", // this is actually attachment ID
    });

РАБОТА С НАЛОЖЕНИЯМИ

Я ответил на аналогичный вопрос here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...