Descripción del objeto
Un objeto es la unidad básica de almacenamiento de datos en OBS. Consiste en los datos y metadatos de un objeto, los cuales describen los atributos del mismo. Los datos cargados en OBS se almacenan como objetos en buckets.
- Una clave especifica el nombre de un objeto. Una clave de objeto es una cadena UTF-8 de hasta 1024 caracteres de longitud. Cada objeto se identifica de forma única dentro de un bucket mediante una clave.
- Los metadatos describen un objeto y pueden definirse por el sistema o por el usuario. El metadato es un conjunto de pares de clave-valor que se asignan al objeto almacenado en OBS.
- La OBS asigna automáticamente los metadatos definidos por el sistema para procesar objetos. Dichos metadatos incluyen Date, Content-Length, Last-Modified, Content-MD5 y más.
- Los metadatos definidos por el usuario se especifican al cargar objetos y se utilizan para describir objetos.
- Los datos se refieren al contenido del objeto.
Por lo general, los objetos se gestionan como archivos. Sin embargo, OBS es un servicio de almacenamiento basado en objetos y no existe un concepto de archivos y carpetas. Para una fácil gestión de datos, OBS proporciona un método para simular carpetas. Al agregar una barra diagonal (/) en un nombre de objeto, por ejemplo, test/123.jpg, puede simular test como una carpeta y 123.jpg como el nombre de un archivo bajo la carpeta test. Sin embargo, la clave del objeto sigue siendo test/123.jpg.
Al cargar un objeto, puede establecer una clase de almacenamiento para el objeto. Si no se especifica ninguna clase de almacenamiento, la clase de almacenamiento de objetos mantiene la misma que la del bucket. También puede cambiar la clase de almacenamiento de un objeto existente en un bucket.
Puede subir archivos (datos) a un bucket de las maneras que desee en función de sus hábitos y escenarios de servicio. A continuación, OBS almacena los archivos como objetos en el bucket. En OBS, los bucket se encuentran en diferentes regiones. Independientemente del método que utilice, puede acceder al mismo bucket y sus recursos en la misma región.
Directrices sobre la asignación de nombres de claves de objetos
Aunque se puede utilizar cualquier carácter UTF-8 en un nombre de clave de objeto, nombrar las claves de objeto de acuerdo con las siguientes directrices puede ayudar a maximizar la compatibilidad de las claves de objeto con otras aplicaciones. Las formas de analizar caracteres especiales varían según las aplicaciones. Las siguientes directrices ayudan a que los nombres de claves de objeto cumplan considerablemente los requisitos de DNS, caracteres de seguridad web, analizadores XML y otras API.
Los siguientes conjuntos de caracteres se pueden utilizar de forma segura en los nombres de clave.
Caracteres alfanuméricos (también conocidos como caracteres no reservados) |
[0-9a-zA-Z] |
Caracteres especiales (también conocidos como caracteres reservados) |
Signo de exclamación (!) Guion (-) Guion bajo (_) Punto (.) Asterisco (*) Comillas simples (') Soporte izquierdo "(" Soporte derecho ")" |
Los siguientes son ejemplos de nombres de clave de objeto válidos:
4my-organization my.great_photos-2014/jan/myvacation.jpg videos/2014/birthday/video1.wmv
Codificación porcentual de caracteres reservados
Si un carácter reservado tiene un significado especial (conocido como propósito reservado) en un URI y el carácter debe usarse para otros propósitos en el URI, este carácter debe estar codificado porcentualmente. Utilice UTF-8 para codificar caracteres que no sean ASCII. De lo contrario, los nombres de los objetos que se suben a OBS pueden ser diferentes de lo que se espera. Por ejemplo, si el carácter reservado "/" se utiliza como delimitador de componentes de ruta en un URI, el carácter tiene un significado especial (separando un nombre de bucket de un nombre de objeto). Si se utiliza "/" en un componente de la ruta de acceso en un URI, use tres caracteres "%2F" o "%2f" para reemplazar a "/".
Caracteres que pueden requerir un procesamiento especial
Caracteres que requieren codificación en un nombre de clave
- Ampersandia (&)
- Signo de dólar ($)
- Punto y coma (;)
- Dos puntos (:)
- La OBS decodifica los signos más (+) en un URI de solicitud en espacios. Si un nombre de clave de objeto original contiene signos más (+), debe codificarse en %2B antes de colocarse en el URI de solicitud.
- Espacio: En algunos casos se puede perder un gran número de espacios consecutivos.
- Señal de igualdad (=)
- Arroba (@)
- Coma (,)
- Signo de interrogación (?)
- Caracteres ASCII: 00-1F en forma hexadecimal (0-31 en forma decimal) y 7F (127 en forma decimal)
Evite utilizar los siguientes caracteres en los nombres de clave, ya que estos caracteres requieren mucho procesamiento especial para mantener la coherencia en todas las aplicaciones.
- Barra diagonal inversa (\)
- Corchete izquierdo ({)
- Caracteres ASCII no imprimibles (128-255 caracteres decimales)
- Símbolo de insertar(^)
- Corchete derecho ({)
- Porcentaje de caracteres (%)
- Acento/Untick (`)
- Paréntesis cuadrado derecho (])
- Comillas
- Signo de mayor que (>)
- Paréntesis cuadrado izquierdo ([)
- La Línea de la Concepción (~)
- Signo de menos que (<)
- Hashtag (#)
- Barra vertical (|)
Tenga en cuenta que OBS adopta una estructura plana, donde se crean los bucket y se almacenan objetos en los bucket. No hay sub-bucket o sub-carpetas en la estructura. Sin embargo, puede usar prefijos de nombre de clave y delimitadores para deducir la estructura lógica como lo hace OBS Console. El concepto de carpeta está disponible en OBS Console. Suponga que su bucket (companybucket) contiene cuatro objetos con las siguientes claves de objeto:
- bucket-log/log01.txt
- cgvbs/test1.txt
- 2015-10-14_111756.png
- test1.txt
OBS Console utiliza el prefijo del nombre de la clave (bucket-log/ y cgvbs/) y el separador (/) para mostrar la estructura de carpetas, como se muestra en la siguiente figura.
Las claves 2015-10-14_111756.png y key test1.txt no tienen prefijos. Por lo tanto, los objetos aparecen en el nivel raíz del bucket. Si abre la carpeta cgvbs/, verá que contiene el objeto test1.txt.
Suponga que su bucket (companybucket) contiene dos objetos con las siguientes claves de objeto:
- obj
- 1/../obj
Si invoca a una API (por ejemplo, usando el SDK) para obtener estos dos objetos, los obtendrá correctamente. Si utiliza OBS Console para acceder a ellos, en realidad obtendrá obj de objetos en función de la relación relativa. Dado que ../ tiene semántica especial en URI, evite usarlo en claves de objeto.