{"id":8755,"date":"2020-06-02T10:01:46","date_gmt":"2020-06-02T17:01:46","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8755"},"modified":"2023-09-29T13:48:47","modified_gmt":"2023-09-29T20:48:47","slug":"store-sync-binary-data-attachments-blobs-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/","title":{"rendered":"Manejar adjuntos de datos binarios y blobs con Couchbase Mobile"},"content":{"rendered":"<p><a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/cbmintro.html\">Couchbase M\u00f3vil<\/a> soporta un modelo de datos NoSQL estilo documento JSON. Adem\u00e1s de soportar los tipos de datos JSON est\u00e1ndar, Couchbase Mobile tambi\u00e9n soporta datos binarios que incluyen im\u00e1genes, audio, v\u00eddeo, archivos PDF, etc. Un documento JSON puede asociarse a uno o m\u00e1s elementos de datos binarios denominados \"adjuntos\" o \"blobs\". Los datos binarios pueden ser sincronizados entre los clientes de Couchbase Lite y el servidor a trav\u00e9s del Sync Gateway. En este post, discutiremos c\u00f3mo crear adjuntos de datos binarios, c\u00f3mo recuperarlos y actualizarlos. Tambi\u00e9n echaremos un vistazo a c\u00f3mo se representan internamente los adjuntos, las idiosincrasias relacionadas y c\u00f3mo lidiar con ellas.<\/p>\n<p>Todo en este post se aplica a un despliegue basado en Couchbase Mobile 2.x.<\/p>\n<h2 id=\"background:attachmentsandblobs\">Antecedentes: Adjuntos y Blobs<\/h2>\n<p>El soporte para asociar datos binarios con documentos JSON dentro de Couchbase Mobile ha evolucionado a lo largo de los a\u00f1os. La representaci\u00f3n interna de datos binarios dentro del documento JSON ha cambiado a trav\u00e9s de las versiones de Couchbase Mobile. En Couchbase Mobile 1.x, los datos binarios se almacenaban en forma de \"adjuntos\" dentro de un documento de nivel superior \"_<em>archivos adjuntos<\/em>\". Couchbase Mobile introdujo el atributo <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.7\/swift.html#blobs\">blob<\/a> para almacenar datos binarios. En la mayor\u00eda de los casos, la discrepancia entre las representaciones a trav\u00e9s de versiones es manejada sin problemas por Couchbase Mobile, por lo que los usuarios finales no tienen que hacer nada especial dentro de sus aplicaciones para hacer frente a ella. Sin embargo, hay ciertos casos en los que los desarrolladores de aplicaciones tendr\u00edan que tomar medidas adicionales para hacer frente a la discrepancia. Tambi\u00e9n discutiremos esas medidas en este post y trataremos de responder a algunas de las preguntas m\u00e1s frecuentes.<\/p>\n<h2 id=\"workflow1:handlingattachmentscreatedoncouchbaselite\">Flujo de trabajo #1: Gesti\u00f3n de archivos adjuntos creados en Couchbase Lite<\/h2>\n<p>Veamos c\u00f3mo puedes crear documentos JSON con datos binarios adjuntos con Couchbase Lite y sincronizarlos con el servidor. Este es el flujo que vamos a describir:<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/05\/attachments.png\" alt=\"\" \/><\/figure>\n<h3 id=\"createbinarydataoncouchbaselite\">Crear adjuntos de datos binarios en Couchbase Lite<\/h3>\n<p>Los desarrolladores deben utilizar el <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.7\/swift.html#blobs\">API de blobs<\/a> para crear datos blob. Un documento puede asociarse con uno o m\u00e1s adjuntos o blobs. He aqu\u00ed un fragmento de c\u00f3digo que muestra el uso de esta API en swift. Consulte la documentaci\u00f3n para desarrolladores para obtener fragmentos de c\u00f3digo equivalentes para otras plataformas.<\/p>\n<pre><code>\r\n let mutableDoc = MutableDocument.init(id: \"user::priya\")\r\n if let profileImage = UIImage(named: \"profile.jpg\"), let imageData = UIImageJPEGRepresentation(profileImage, 0.75) {\r\n   let blob = Blob(contentType: \"image\/jpeg\", data: imageData)\r\n   mutableDoc.setBlob(blob, forKey: \"image\")\r\n }\r\n \/\/ \u2026 Add other properties\r\n mutableDoc.setString(\"user\", forKey: \"type\")\r\n mutableDoc.setString(\"Priya\", forKey: \"name\")\r\n mutableDoc.setString(\"priya.rajagopal@couchbase.com, forKey: \"email\")\r\n do {\r\n   try? db.saveDocument(mutableDoc)\r\n }\r\n catch {\r\n   print(\"Error in saving document : (error)\")\r\n }\r\n<\/code><\/pre>\n<h3 id=\"internalrepresentation\">Representaci\u00f3n interna<\/h3>\n<p>Cuando el documento se crea en Couchbase Lite, internamente, se ve algo como esto:<\/p>\n<pre><code>{\r\n  \"email\": \"priya.rajagopal@couchbase.com\",\r\n  \"image\": {\r\n   \"length\": 3888349,\r\n   \"digest\": \"sha1\u20134xlj1AKFgLdzcD7a1pVChrVTJIc=\",\r\n   \"content_type\": \"image\/jpeg\",\r\n   \"@type\": \"blob\"\r\n  },\r\n \"type\": \"user\",\r\n \"name\": \"Priya\",\r\n \"id\": \"user::priya\",\r\n \"rev\": \"1\u20131c8502034001b333cc469fe8c4c39e112eedf8a3\"\r\n}<\/code><\/pre>\n<p>F\u00edjese en el <em>\"@type\": \"blob\" <\/em>entrada de tipo creada para los datos del tipo de imagen.<\/p>\n<p><strong>Nota<\/strong> que hay varios metadatos a nivel de sistema como _<em>id<\/em> que se incluyen en el documento. Por brevedad, no se muestra todo en el ejemplo. Las aplicaciones nunca deben hacer suposiciones sobre el formato y la disponibilidad de los metadatos a nivel de sistema y, por esa raz\u00f3n, las aplicaciones nunca deben acceder a esos atributos directamente. Utilice siempre las opciones de recuperaci\u00f3n de metadatos como <em>meta().id<\/em>.<\/p>\n<h3 id=\"syncingattachmentstosyncgateway\">Sincronizaci\u00f3n de archivos adjuntos con Sync Gateway<\/h3>\n<p>Sync Gateway es compatible con Couchbase Mobile 1.x. Esto implica que Sync Gateway debe ser capaz de procesar datos binarios utilizando la versi\u00f3n 1.x _. <em>archivos adjuntos<\/em> as\u00ed como la representaci\u00f3n 2.x <em>blob<\/em> tipo. Esto tambi\u00e9n implica que cuando el cliente Couchbase Lite 2.x env\u00eda datos a la puerta de enlace de sincronizaci\u00f3n, necesita enviarlos en un formato que sea compatible con los clientes 1.x.<\/p>\n<p>Por esa raz\u00f3n, cuando Couchbase Lite sincroniza el documento con la Sync Gateway, a\u00f1ade la propiedad <strong><em>_<\/em><\/strong><em>archivos adjuntos\u00a0<\/em>en el documento. As\u00ed, el documento, una vez introducido, tendr\u00eda un aspecto similar al del ejemplo siguiente. La lista de anexos asociados al documento se especifica en el campo <em>Adjuntos<\/em> objeto.<\/p>\n<pre style=\"padding-left: 80px\"><em><code>{\r\n  \"attachments\": {\r\n  \"blob\/image\": {\r\n   \"content_type\": \"image\/jpeg\",\r\n   \"digest\": \"sha1\u20134xlj1AKFgLdzcD7a1pVChrVTJIc=\",\r\n   \"length\": 3888349,\r\n   \"revpos\": 1,\r\n   \"stub\": true\r\n   }\r\n  },\r\n  \"email\": \"priya.rajagopal@couchbase.com\",\r\n  \"image\": {\r\n  \"@type\": \"blob\",\r\n  \"content_type\": \"image\/jpeg\",\r\n  \"digest\": \"sha1\u20134xlj1AKFgLdzcD7a1pVChrVTJIc=\",\r\n  \"length\": 3888349\r\n  },\r\n  \"name\": \"Priya\",\r\n  \"type\": \"user\",\r\n  \"id\": \"user::priya\",\r\n  \"rev\": \"1\u20131c8502034001b333cc469fe8c4c39e112eedf8a3\",\r\n}<\/code><\/em><\/pre>\n<p><strong>Nota<\/strong> que hay varios metadatos a nivel de sistema como _<em>id<\/em> que se incluye en el documento. En aras de la brevedad, no se muestra todo en el ejemplo. Las aplicaciones nunca deben hacer suposiciones sobre el formato y la disponibilidad de los metadatos a nivel de sistema y, por esa raz\u00f3n, las aplicaciones nunca deben acceder a esos atributos directamente. Utilice siempre las opciones de recuperaci\u00f3n de metadatos como <em>meta().id<\/em>.<\/p>\n<h3 id=\"retrievalofattachmentonsyncgateway\">Recuperaci\u00f3n de archivos adjuntos en Sync Gateway<\/h3>\n<p>Los datos adjuntos deben recuperarse a trav\u00e9s de Sync Gateway <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/attachment\/get__db___doc___attachment_\">_<em>archivos adjuntos<\/em> REST<\/a> endpoint. En el momento de escribir este post, los archivos adjuntos no se pueden gestionar directamente utilizando los SDK de Couchbase Server.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de comando curl para recuperar los archivos adjuntos asociados a un documento utilizando la funci\u00f3n _<em>archivos adjuntos<\/em> REST. Sustituir\u00eda la cabecera de autorizaci\u00f3n por las credenciales adecuadas correspondientes al usuario configurado en su sistema. Adem\u00e1s, f\u00edjese en el nombre del archivo adjunto, \"<em>mancha_<\/em>%2Fimage&#8221; is the URL encoded version of <em>\"blob<\/em>\/imagen\"_.<\/p>\n<pre><code>curl -X GET \r\n 'https:\/\/sync-gateway-url:4984\/dbname\/user::priya\/blob_%2Fimage' \r\n -H 'Accept: application\/json' \r\n -H 'Authorization: Basic ZGVtbzpwYXNzd29yZA=='<\/code><\/pre>\n<h3 id=\"updatingattachmentsonsyncgateway\">Actualizaci\u00f3n de archivos adjuntos en Sync Gateway<\/h3>\n<p>Los datos adjuntos deben actualizarse a trav\u00e9s de Sync Gateway <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/attachment\/put__db___doc___attachment_\">_<em>archivos adjuntos<\/em> REST<\/a> endpoint. En el momento de escribir este post, los archivos adjuntos m\u00f3viles no se pueden gestionar mediante los SDK de Couchbase Server.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de comando curl para actualizar un archivo adjunto asociado a un documento utilizando la funci\u00f3n _<em>archivos adjuntos<\/em> REST. Sustituya la cabecera de autorizaci\u00f3n por las credenciales adecuadas correspondientes al usuario configurado en su sistema. Adem\u00e1s, observe que la cabecera <em>\"rev\"<\/em> . Este par\u00e1metro corresponde a la revisi\u00f3n del documento que debe actualizarse. Puede recuperar el revId utilizando la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/document\/get__db___doc_\">GET documento REST<\/a>.<\/p>\n<pre><code> curl -i -X PUT 'https:\/\/sync-gateway-url:4984\/dbname\/user::priya\/blob_%2Fimage?rev=12-fa2bf00dab7e811eb562a502429ec633' \r\n -H 'Accept: application\/json' \r\n -H 'Authorization: Basic ZGVtbzE6cGFzc3dvcmQ=' \r\n -H 'Content-Type: image\/png' \r\n -H 'cache-control: no-cache' \r\n \u2013data-binary \"@layered.png\"<\/code><\/pre>\n<h3 id=\"but...wait..amismatch\">Pero... espera... \u00a1un desajuste!<\/h3>\n<p>Ahora, despu\u00e9s de actualizar el archivo adjunto, si recupera el documento utilizando la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/document\/get__db___doc_\">GET documento REST<\/a>,<\/p>\n<pre><code> curl -X GET \r\n 'https:\/\/sync-gateway-url:4984\/dbname\/user::priya\/blob_%2Fimage' \r\n -H 'Accept: application\/json' \r\n -H 'Authorization: Basic ZGVtbzE6cGFzc3dvcmQ=' \r\n -H 'Content-Type: application\/json' \r\n -H 'cache-control: no-cache'<\/code><\/pre>\n<p>La respuesta correspondiente ser\u00eda algo as\u00ed<\/p>\n<pre><code>{\r\n  \"attachments\": {\r\n  \"blob\/image\": {\r\n   \"content_type\": \"image\/png\",\r\n   \"digest\": \"sha1-XeeXt0I014+1qpH+s2S2AUSg4II=\",\r\n   \"length\": 3444504,\r\n   \"revpos\": 16,\r\n   \"stub\": true\r\n   }\r\n  },\r\n  \"id\": \"user::demo1\",\r\n  \"rev\": \"13-e61d1a9e63069030212007a8b5eddde9\",\r\n  \"address\": \"\",\r\n  \"email\": \"demo1\",\r\n  \"image\": {\r\n   \"@type\": \"blob\",\r\n   \"content_type\": \"image\/jpeg\",\r\n   \"digest\": \"sha1\u20134xlj1AKFgLdzcD7a1pVChrVTJIc=\",\r\n   \"length\": 3888349\r\n  },\r\n  \"name\": \"Priya Rajagopal\",\r\n  \"type\": \"user\"\r\n}<\/code><\/pre>\n<p>Observar\u00e1 que el <em>_attachment<\/em> y <em>blob<\/em> no coinciden. Mientras que la <em>_attachment<\/em> apunta a la \u00faltima imagen, la <em>blob<\/em> sigue describiendo la imagen antigua. <em>Pero est\u00e1 bien.<\/em>!<\/p>\n<p>La raz\u00f3n de esta discrepancia se debe a que Sync Gateway s\u00f3lo trabaja con archivos adjuntos de estilo 1.x.<\/p>\n<p>\u00bfC\u00f3mo sigue funcionando esto?<\/p>\n<p>Esto funciona porque en el contexto de la puerta de enlace de sincronizaci\u00f3n, que se ocupa de los archivos adjuntos de estilo 1.x, s\u00f3lo se respeta la entrada del archivo adjunto.<\/p>\n<p>\u00bfPero qu\u00e9 pasa con Couchbase Lite? \u00bfQu\u00e9 pasa cuando el documento actualizado es sincronizado por el cliente Couchbase Lite 2.x?<\/p>\n<p>Cuando el documento es replicado por el cliente Couchbase Lite 2.x, Couchbase Lite busca la presencia de <em>Adjuntos<\/em> y <em>manchas<\/em> dentro del documento e implementa la l\u00f3gica adecuada para identificar que se trata de un documento de estilo 2.x creado por un cliente 2.x pero actualizado posteriormente por un cliente 1.x (como la API REST de Sync Gateway). Por lo tanto, trata el <em>Adjuntos<\/em> como el archivo adjunto \"real\" y unifica la entrada blob correspondiente.<\/p>\n<p>Desde el punto de vista del desarrollador, todo esto se gestiona autom\u00e1ticamente. As\u00ed que realmente no tienes que preocuparte por ninguno de los detalles. Como desarrollador, tendr\u00edas que saber c\u00f3mo recuperar el archivo adjunto actualizado desde dentro de la aplicaci\u00f3n habilitada para Couchbase Lite.<\/p>\n<h3 id=\"retrievalofupdatedattachmentoncouchbaselite\">Recuperaci\u00f3n de archivos adjuntos actualizados en Couchbase Lite<\/h3>\n<p>Cuando el archivo adjunto actualizado se sincronice con su aplicaci\u00f3n Couchbase Lite, utilice la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.7.0\/couchbase-lite-swift\/Classes\/Blob.html#\/s:18CouchbaseLiteSwift4BlobC11contentType4dataACSS_10Foundation4DataVtcfc\">API de Blob<\/a> para recuperar los datos. Aqu\u00ed hay un fragmento de c\u00f3digo que muestra el uso de esta API en swift. Consulte la documentaci\u00f3n para desarrolladores para obtener fragmentos de c\u00f3digo equivalentes para otras plataformas.<\/p>\n<pre><code>\r\n if let doc = db.document(withID: \"user::priya\") {\r\n     let blobValue = doc.blob(forKey:\"image\")?.content\r\n     \/\/ use the blobValue\r\n }\r\n<\/code><\/pre>\n<p>Ahora veamos el flujo inverso.<\/p>\n<h2 id=\"workflow2:handlingofattachmentscreatedonsyncgateway\">Flujo de trabajo #2: Gesti\u00f3n de archivos adjuntos creados en Sync Gateway<\/h2>\n<p>Veamos c\u00f3mo crear documentos JSON con datos binarios adjuntos en Sync Gateway y sincronizarlos con Couchbase Lite.<br \/>\nEste es el flujo que vamos a describir -<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/05\/attachments-2.png\" alt=\"\" \/><\/figure>\n<h3 id=\"createbinarydataattachmentsonserver\">Crear archivos adjuntos de datos binarios en el servidor<\/h3>\n<p>Para adjuntar datos binarios en el lado del servidor Couchbase que puedan sincronizarse con los clientes a trav\u00e9s de la puerta de enlace de sincronizaci\u00f3n, deber\u00e1 utilizar la puerta de enlace de sincronizaci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/attachment\/put__db___doc___attachment_\">punto final REST de archivos adjuntos<\/a>. En el momento de escribir este post, los archivos adjuntos compatibles con m\u00f3viles no se pueden crear directamente utilizando los SDK de Couchbase Server. Los datos adjuntos que se crean a trav\u00e9s del punto final REST de Sync Gateway se mantienen en el bucket de Couchbase Server y se sincronizan con los clientes de Couchbase Lite sujetos a las pol\u00edticas de control de acceso configuradas en Sync Gateway.<\/p>\n<p>Para ello, cree primero un documento (o recupere un documento creado previamente) y, a continuaci\u00f3n, cree el archivo adjunto para el documento. Otra posibilidad es crear un documento de varias partes con datos JSON y binarios. Pero esto podr\u00eda resultar tedioso, ya que tambi\u00e9n habr\u00eda que generar los metadatos pertinentes del archivo adjunto. As\u00ed que los pasos descritos a continuaci\u00f3n es mi opci\u00f3n preferida<\/p>\n<ul>\n<li><strong>Crear documento<\/strong><\/li>\n<\/ul>\n<p>Un documento JSON puede crearse directamente en el servidor Couchbase utilizando el SDK del servidor Couchbase o la interfaz de usuario de administraci\u00f3n, o bien puede crearse utilizando la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/document\/put__db___doc_\">Documento PUT<\/a> API REST. El documento tambi\u00e9n podr\u00eda haberse sincronizado desde un cliente Couchbase Lite.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de uso del punto final REST de Sync Gateway para crear un documento con Id. <em>\"usuario::jane\"<\/em>. Deber\u00e1 sustituir el encabezado de autorizaci\u00f3n por las credenciales adecuadas correspondientes al usuario configurado en su instalaci\u00f3n.<\/p>\n<pre><code>curl -X PUT \r\n 'https:\/\/sync-gateway-url:4984\/dbname\/user::jane\/' \r\n -H 'Accept: application\/json' \r\n -H 'Authorization: Basic ZGVtbzpwYXNzd29yZA==' \r\n -H 'Content-Type: application\/json' \r\n -d '{\r\n \"email\": \"jane.doe@example.com\",\r\n \"type\": \"user\",\r\n \"name\": \"Jane Doe\"\r\n}'<\/code><\/pre>\n<p>La respuesta ser\u00eda algo parecido a lo siguiente<\/p>\n<pre><code>{\r\n  \"id\": \"user::jane\",\r\n  \"ok\": true,\r\n  \"rev\": \"1-ed2d37e7ece0dc5726fecd211433cbba\"\r\n}<\/code><\/pre>\n<ul>\n<li><strong>Crear anexo para documento en Sync Gateway<\/strong><\/li>\n<\/ul>\n<p>Los datos adjuntos deben crearse a trav\u00e9s de Sync Gateway <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/attachment\/put__db___doc___attachment_\">_<em>archivos adjuntos<\/em> REST<\/a> endpoint. Este paso es id\u00e9ntico al flujo anterior cuando se actualizaba un anexo a trav\u00e9s del punto final REST.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de comando curl para actualizar un archivo adjunto asociado a un documento utilizando la funci\u00f3n _<em>archivos adjuntos<\/em> REST. Deber\u00e1 sustituir la cabecera de autorizaci\u00f3n por las credenciales adecuadas correspondientes al usuario configurado en su instalaci\u00f3n. La direcci\u00f3n <em>\"rev\"<\/em> . Este par\u00e1metro corresponde a la revisi\u00f3n del documento que debe actualizarse.<\/p>\n<pre><code> curl -i -X PUT \r\n 'https:\/\/sync-gateway-url:4984\/dbname\/user::jane\/blob_%2Fimage?rev=1-ed2d37e7ece0dc5726fecd211433cbba' \r\n -H 'Accept: application\/json' \r\n -H 'Authorization: Basic ZGVtbzE6cGFzc3dvcmQ=' \r\n -H 'Content-Type: image\/png' \r\n \u2013data-binary \"@layered.png\u201d<\/code><\/pre>\n<h3 id=\"internalrepresentation\">Representaci\u00f3n interna<\/h3>\n<p>Cuando el documento sea actualizado por la pasarela de sincronizaci\u00f3n, tendr\u00e1 el siguiente aspecto<br \/>\nSi recupera el documento mediante la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/sync-gateway\/2.7\/rest-api.html#\/document\/get__db___doc_\">GET documento REST<\/a>,<\/p>\n<pre><code> curl -X GET \r\n 'https:\/\/sync-gateway-url:4984\/dbname\/user::jane\/blob_%2Fimage' \r\n -H 'Accept: application\/json' \r\n -H 'Authorization: Basic ZGVtbzE6cGFzc3dvcmQ=' \r\n -H 'Content-Type: application\/json' \r\n -H 'cache-control: no-cache'<\/code><\/pre>\n<p>La respuesta correspondiente ser\u00eda algo as\u00ed<\/p>\n<pre><em><code>{\r\n  \"attachments\": {\r\n  \"blob\/image\": {\r\n   \"content_type\": \"image\/png\",\r\n   \"digest\": \"sha1-VteI8PPA3tFVxeW8z2qoJpQo40Y=\",\r\n   \"length\": 1768,\r\n   \"revpos\": 2,\r\n   \"stub\": true\r\n   }\r\n  },\r\n  \"id\": \"user::jane\",\r\n  \"rev\": \"2\u201395da324bd67db252d8b682cd113e3879\",\r\n  \"email\": \"jane.doe@example.com\",\r\n  \"type\": \"user\",\r\n  \"name\": \"Jane Doe\"\r\n}<\/code><\/em><\/pre>\n<p>La creaci\u00f3n de archivos adjuntos mediante la API REST de archivos adjuntos de Sync Gateway dar\u00e1 como resultado la representaci\u00f3n de archivos adjuntos de estilo 1.x. Observa que no hay metadatos \"blob\" estilo 2.x. Esto es importante cuando accedes al documento en Couchbase Lite.<\/p>\n<h3 id=\"retrievalofupdatedattachmentoncouchbaselite\">Recuperaci\u00f3n de archivos adjuntos actualizados en Couchbase Lite<\/h3>\n<p>Cuando el documento creado previamente se sincroniza con el lado de Couchbase Lite, detecta que se trata de un documento de estilo 1.x y deja el campo <em>Adjuntos<\/em>\u00a0intacta. Trata los objetos anidados dentro del <em>Adjuntos<\/em> como blobs. Sin embargo, el documento no se actualiza autom\u00e1ticamente para incluir la entrada \"blob\" que se a\u00f1ade. Por lo tanto, la aplicaci\u00f3n deber\u00e1 buscar la presencia de blobs mediante la funci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/mobile\/2.7.0\/couchbase-lite-swift\/Classes\/Blob.html#\/s:18CouchbaseLiteSwift4BlobC11contentType4dataACSS_10Foundation4DataVtcfc\">API de Blob<\/a> en ambos lugares.<\/p>\n<pre><code> \/\/ First look for blob at the top level blob entry\r\n if let imageVal = userVal.blob(forKey:\"image\")?.content {\r\n   \/\/ imageVal contains the attachment\r\n }\r\n else {\r\n   \/\/ Handle campatability with attachments created via Sync Gateway API\r\n   \/\/ Those attachments are created with 1.x style.\r\n   let attachments = userVal.dictionary(forKey: \"attachments\")\r\n   let imageVal = attachments?.blob(forKey:\"blob\/image\")?.content\r\n   \/\/ imageVal contains the attachment\r\n }<\/code><\/pre>\n<h2 id=\"faq\">PREGUNTAS FRECUENTES<\/h2>\n<p>Para terminar, he recopilado una lista de preguntas frecuentes relacionadas con el manejo de adjuntos en Couchbase Mobile<\/p>\n<h3 id=\"whereareattachmentsstored\">\u00bfD\u00f3nde se guardan los archivos adjuntos?<\/h3>\n<p>En Couchbase Lite, los adjuntos se almacenan en la instancia de base de datos de Couchbase Lite que contiene el documento correspondiente. Se almacena separadamente del documento que contiene los metadatos asociados que contienen la referencia al adjunto. Si el mismo adjunto es compartido por m\u00faltiples documentos, s\u00f3lo una instancia del adjunto es almacenada en la base de datos.<\/p>\n<p>En Couchbase Server, los adjuntos se almacenan en el mismo bucket de Couchbase Server que el documento correspondiente. Se almacenan separados del documento que contiene los metadatos asociados que contienen la referencia al adjunto. Si el mismo adjunto es compartido por m\u00faltiples documentos, s\u00f3lo una instancia del adjunto es almacenada en el bucket.<\/p>\n<h3 id=\"howmanyattachmentscanbeassociatedwithadocument\">\u00bfExiste un l\u00edmite en el n\u00famero de archivos adjuntos que pueden asociarse a un documento?<\/h3>\n<p>Puede adjuntar uno o varios anexos a un documento JSON. No hay l\u00edmites estrictos en el n\u00famero de archivos adjuntos que se pueden asociar a un documento. Sin embargo, dado que los metadatos adjuntos se almacenan en las xattrs del documento (cuando shared_bucket_access est\u00e1 habilitado) el n\u00famero de adjuntos est\u00e1 limitado por el tama\u00f1o de metadatos de sincronizaci\u00f3n permitido por documento. Dado que los metadatos adjuntos oscilan entre 100 y 200 bytes y que el l\u00edmite de tama\u00f1o de los metadatos de sincronizaci\u00f3n es de 1 MB por documento, existen l\u00edmites pr\u00e1cticos en cuanto al n\u00famero de archivos adjuntos que se pueden asociar a un documento.<\/p>\n<h3 id=\"whatisthemaximumsizeofanattachment\">\u00bfCu\u00e1l es el tama\u00f1o m\u00e1ximo de un archivo adjunto?<\/h3>\n<p>El tama\u00f1o m\u00e1ximo de cada archivo adjunto es de 20 MB. Esto se debe a los l\u00edmites de tama\u00f1o de los documentos en Couchbase Server. Mientras que Couchbase Lite permite adjuntos de tama\u00f1o superior a 20MB y esto est\u00e1 bien siempre y cuando el adjunto sea s\u00f3lo local y se garantice que nunca ser\u00e1 sincronizado con el servidor. Sin embargo, se advierte a los desarrolladores que no creen archivos adjuntos tan grandes, ya que ser\u00e1n rechazados por el Sync Gateway.<\/p>\n<h3 id=\"doattachmentssynceverytimetheassociatedjsondocumentchanges\">\u00bfSe sincronizan los archivos adjuntos cada vez que cambia el documento JSON asociado?<\/h3>\n<p>El protocolo de replicaci\u00f3n est\u00e1 optimizado para sincronizar adjuntos s\u00f3lo cuando hay actualizaciones en ellos. Esto implica que no son empujados o tirados por los clientes de Couchbase Lite incluso si hay actualizaciones de otros datos en los documentos JSON asociados.<\/p>\n<h3 id=\"doattachmentssynceverytimetheassociatedjsondocumentchanges\">\u00bfC\u00f3mo gestiona el protocolo los fallos al sincronizar archivos adjuntos?<\/h3>\n<p>El protocolo es muy robusto en t\u00e9rminos de manejo de fallos de sincronizaci\u00f3n, por ejemplo debido a interrupciones de la red. Los documentos no se guardan en el Sync Gateway o en Couchbase Lite hasta que todos los archivos adjuntos o blobs asociados se hayan sincronizado correctamente. Por lo tanto, podr\u00eda haber una ventana de tiempo en la que podr\u00edas acabar con adjuntos\/blogs hu\u00e9rfanos que no tienen documentos asociados. Eso no es un problema porque la sincronizaci\u00f3n subsiguiente del documento reconocer\u00e1 que el adjunto ya est\u00e1 persistente y no intentar\u00e1 resincronizarlo de nuevo.<\/p>\n<h2 id=\"whatsnext\">El futuro<\/h2>\n<p>Couchbase Mobile proporciona una interfaz f\u00e1cil de usar para gestionar archivos adjuntos. Echa un vistazo a la <a href=\"https:\/\/docs.couchbase.com\/couchbase-lite\/2.7\/swift.html#blobs\">documentaci\u00f3n<\/a> para m\u00e1s detalles sobre el manejo de blobs en cada una de las plataformas.<br \/>\nSi tiene alguna pregunta o sugerencia, deje un comentario a continuaci\u00f3n o p\u00f3ngase en contacto conmigo a trav\u00e9s de <a href=\"https:\/\/twitter.com\/rajagp\">Twitter<\/a>\u00a0o <a href=\"mailto:priya.rajagopal@couchbase.com\">env\u00edame un correo electr\u00f3nico<\/a>. En <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de desarrollo de Couchbase<\/a> son un gran lugar para relacionarse con la comunidad de desarrollo de Couchbase.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase Mobile supports a JSON document style NoSQL data model. In addition to supporting the standard JSON data types, Couchbase Mobile also supports binary data that include images, audio, video, PDF files, etc. A JSON document can be associated with [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":10435,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2370,1815,1810,1819,2366,2351],"tags":[2358],"ppma_author":[8948],"class_list":["post-8755","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-best-practices-and-tutorials","category-couchbase-mobile","category-data-modeling","category-sync-gateway","category-xamarin","tag-couchbase-mobile-2-x"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Binary Data Attachments &amp; Blobs: Handle w\/ Couchbase Mobile<\/title>\n<meta name=\"description\" content=\"Create binary data attachments, retrieve and update them, and learn how attachments are internally represented, idiosyncrasies and dealing with them.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Handle Binary Data Attachments &amp; Blobs with Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"Create binary data attachments, retrieve and update them, and learn how attachments are internally represented, idiosyncrasies and dealing with them.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-02T17:01:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-29T20:48:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/06\/Blog-Binary-Data-1-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1590\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Handle Binary Data Attachments &amp; Blobs with Couchbase Mobile\",\"datePublished\":\"2020-06-02T17:01:46+00:00\",\"dateModified\":\"2023-09-29T20:48:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\"},\"wordCount\":2205,\"commentCount\":8,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg\",\"keywords\":[\"couchbase mobile 2.x\"],\"articleSection\":[\"Android\",\"Best Practices and Tutorials\",\"Couchbase Mobile\",\"Data Modeling\",\"Sync Gateway\",\"Xamarin\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\",\"name\":\"Binary Data Attachments & Blobs: Handle w\/ Couchbase Mobile\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg\",\"datePublished\":\"2020-06-02T17:01:46+00:00\",\"dateModified\":\"2023-09-29T20:48:47+00:00\",\"description\":\"Create binary data attachments, retrieve and update them, and learn how attachments are internally represented, idiosyncrasies and dealing with them.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg\",\"width\":1590,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Handle Binary Data Attachments &amp; Blobs with Couchbase Mobile\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Binary Data Attachments & Blobs: Handle w\/ Couchbase Mobile","description":"Cree archivos adjuntos de datos binarios, recup\u00e9relos y actual\u00edcelos, y aprenda c\u00f3mo se representan internamente los archivos adjuntos, las idiosincrasias y c\u00f3mo tratar con ellos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/","og_locale":"es_MX","og_type":"article","og_title":"Handle Binary Data Attachments &amp; Blobs with Couchbase Mobile","og_description":"Create binary data attachments, retrieve and update them, and learn how attachments are internally represented, idiosyncrasies and dealing with them.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-06-02T17:01:46+00:00","article_modified_time":"2023-09-29T20:48:47+00:00","og_image":[{"width":1590,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/06\/Blog-Binary-Data-1-1.jpg","type":"image\/jpeg"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Handle Binary Data Attachments &amp; Blobs with Couchbase Mobile","datePublished":"2020-06-02T17:01:46+00:00","dateModified":"2023-09-29T20:48:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/"},"wordCount":2205,"commentCount":8,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg","keywords":["couchbase mobile 2.x"],"articleSection":["Android","Best Practices and Tutorials","Couchbase Mobile","Data Modeling","Sync Gateway","Xamarin"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/","name":"Binary Data Attachments & Blobs: Handle w\/ Couchbase Mobile","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg","datePublished":"2020-06-02T17:01:46+00:00","dateModified":"2023-09-29T20:48:47+00:00","description":"Cree archivos adjuntos de datos binarios, recup\u00e9relos y actual\u00edcelos, y aprenda c\u00f3mo se representan internamente los archivos adjuntos, las idiosincrasias y c\u00f3mo tratar con ellos.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/06\/Blog-Binary-Data-1-1.jpg","width":1590,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/store-sync-binary-data-attachments-blobs-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Handle Binary Data Attachments &amp; Blobs with Couchbase Mobile"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c","name":"Priya Rajagopal, Directora de Gesti\u00f3n de Productos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","author_category":"","last_name":"Rajagopal, Senior Director, Product Management","first_name":"Priya","job_title":"","user_url":"","description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/8755","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=8755"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/8755\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/10435"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=8755"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=8755"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=8755"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=8755"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}