Invoque la operación PostObject para cargar un objeto en un bucket mediante un formulario HTML.
Notas de uso
La carga mediante formulario HTML requiere el permiso
oss:PutObject. Attach a custom policy to a RAM user.Los objetos cargados con PostObject no pueden superar los 5 GB.
Una solicitud PostObject requiere permisos de escritura en el bucket. Si la ACL del bucket es public-read-write, no se necesita información de firma. De lo contrario, OSS autentica la firma en la solicitud.
A diferencia de PutObject, PostObject utiliza un AccessKey secret para firmar la política. La cadena de firma resultante es el valor del campo de formulario Signature, que OSS autentica.
La URL del formulario es el nombre de dominio del bucket sin el nombre del objeto. La línea de solicitud es
POST / HTTP/1.1, noPOST /ObjectName HTTP/1.1.Si una solicitud POST contiene información de firma en el encabezado o en la URL, OSS no verifica dicha información.
Control de versiones
Si el control de versiones está habilitado en el bucket, OSS genera un ID de versión único para el objeto cargado y lo devuelve en el encabezado de respuesta x-oss-version-id.
Si el control de versiones está suspendido, OSS genera un ID de versión nulo para el objeto cargado y lo devuelve en el encabezado de respuesta x-oss-version-id. Solo se permite un ID de versión nulo por objeto.
Sintaxis de la solicitud
POST / HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
User-Agent: browser_data
Content-Length: ContentLength
Content-Type: multipart/form-data; boundary=9431149156168
--9431149156168
Content-Disposition: form-data; name="key"
key
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"
success_redirect
--9431149156168
Content-Disposition: form-data; name="Content-Disposition"
attachment;filename=oss_download.jpg
--9431149156168
Content-Disposition: form-data; name="x-oss-meta-uuid"
myuuid
--9431149156168
Content-Disposition: form-data; name="x-oss-meta-tag"
mytag
--9431149156168
Content-Disposition: form-data; name="OSSAccessKeyId"
access-key-id
--9431149156168
Content-Disposition: form-data; name="policy"
encoded_policy
--9431149156168
Content-Disposition: form-data; name="Signature"
signature
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg
file_content
--9431149156168
Content-Disposition: form-data; name="submit"
Upload to OSS
--9431149156168--
Encabezados de la solicitud
El cuerpo de la solicitud PostObject utiliza codificación multipart/form-data. A diferencia de PutObject, que pasa parámetros en encabezados HTTP, PostObject los pasa como campos de formulario en el cuerpo.
PostObject no admite el encabezado x-oss-tagging. Una vez completada la operación PostObject, invoque PutObjectTagging para etiquetar el objeto.
|
Nombre |
Tipo |
Obligatorio |
Descripción |
|
Content-Type |
String |
No |
Tipo de archivo y codificación de la página web, lo cual determina cómo leen los navegadores el archivo. El formulario enviado en una operación Post debe estar codificado en formato El límite (boundary) es una cadena aleatoria generada por el formulario. No necesita especificarlo. Los SDK generan este valor automáticamente. |
Esta operación también utiliza Common request headers, como Host y Date.
Elementos del formulario
A continuación se describen los elementos del formulario comunes a las firmas V1 y V4. Para obtener información sobre los elementos exclusivos de las firmas V4, consulte V4 signature form. Para obtener información sobre los elementos exclusivos de las firmas V1, consulte V1 signature form.
El campo file debe ser el último campo del formulario. Los demás campos pueden ir en cualquier orden.
La clave de un campo de formulario no puede superar los 8 KB de tamaño, y el valor no puede superar los 2 MB.
|
Nombre |
Tipo |
Obligatorio |
Descripción |
|
Cache-Control |
String |
No |
Comportamiento de caché al descargar el objeto, según se define en RFC 2616. Valor predeterminado: none. |
|
Content-Disposition |
String |
No |
Nombre de descarga del objeto, según se define en RFC 2616. Valor predeterminado: none. |
|
Content-Encoding |
String |
No |
Codificación de contenido del objeto al descargarse, según se define en RFC 2616. Valor predeterminado: none. |
|
Expires |
String |
No |
Tiempo de expiración de la caché, según se define en RFC 2616. Valor predeterminado: none. |
|
policy |
String |
Sí, condicional |
Especifica la validez de los campos del formulario de solicitud. Una solicitud sin el campo policy se trata como anónima y solo puede acceder a buckets public-read-write. Valor predeterminado: none. Restricción: Obligatorio si el bucket no es public-read-write, o si se proporciona OSSAccessKeyId o Signature. Importante
El formulario y la política deben tener codificación UTF-8. El campo de formulario policy también debe estar codificado en Base64. |
|
x-oss-server-side-encryption-key-id |
String |
No |
Clave maestra del cliente (CMK) administrada por KMS. Válido únicamente cuando x-oss-server-side-encryption se establece en KMS. |
|
x-oss-content-type |
String |
No |
Reemplaza el Content-Type que los navegadores agregan automáticamente al campo de formulario file. Este elemento tiene la mayor prioridad para especificar Content-Type. Orden de prioridad: x-oss-content-type > Content-Type del campo de formulario file Valor predeterminado: none. |
|
x-oss-forbid-overwrite |
String |
No |
Especifica si se debe sobrescribir un objeto con el mismo nombre durante una operación PostObject. Cuando el control de versiones está habilitado o suspendido, x-oss-forbid-overwrite se ignora y los objetos con el mismo nombre pueden sobrescribirse.
El encabezado x-oss-forbid-overwrite reduce las QPS. Si su uso de x-oss-forbid-overwrite supera las 1,000 QPS, póngase en contacto con el soporte técnico. |
|
x-oss-object-acl |
String |
No |
Permisos de acceso para el objeto cargado. Valores válidos:
Los permisos de acceso se describen en Object ACL. |
|
x-oss-storage-class |
String |
No |
Especifica la clase de almacenamiento del objeto. Independientemente de la clase de almacenamiento del bucket, el objeto cargado utiliza la clase que usted especifique. Por ejemplo, si establece x-oss-storage-class como Standard para un bucket IA, el objeto se almacena como Standard. Valores válidos:
|
|
key |
String |
Sí |
Nombre del objeto a cargar. No codifique el nombre. Si el nombre incluye una ruta, como Valor predeterminado: none. |
|
success_action_redirect |
String |
No |
URL a la que se redirige al cliente tras una carga exitosa. Si no se especifica, el comportamiento de la respuesta lo determina success_action_status. En caso de error, OSS devuelve un error sin redirigir. Valor predeterminado: none. |
|
success_action_status |
String |
No |
Código de estado HTTP devuelto tras una carga exitosa cuando no se especifica success_action_redirect. Valores válidos: 200, 201 y 204 (predeterminado).
|
|
x-oss-meta-* |
String |
No |
Metadatos definidos por el usuario. Valor predeterminado: none. Los campos de formulario con prefijo x-oss-meta- se almacenan como metadatos de usuario. Ejemplo: Nota
Un objeto puede tener varios de estos parámetros, pero el tamaño total de todos los metadatos de usuario no puede superar los 8 KB. |
|
x-oss-security-token |
String |
No |
Token de seguridad STS. Obligatorio solo al usar STS para construir una URL firmada. Obtenga un token invocando la operación AssumeRole. Valor predeterminado: none. |
|
file |
String |
Sí |
Contenido de archivo o texto. No codifique el contenido. El navegador establece Content-Type según el tipo de archivo, sobrescribiendo su configuración. Solo se puede cargar un archivo por solicitud. Valor predeterminado: none. Importante
El campo file debe ser el último campo del formulario. |
Encabezados de respuesta
|
Nombre |
Tipo |
Ejemplo |
Descripción |
|
x-oss-server-side-encryption |
String |
KMS |
Se devuelve si se especifica x-oss-server-side-encryption en la solicitud. Indica el algoritmo de cifrado utilizado. |
|
Content-MD5 |
String |
1B2M2Y8AsgTpgAmY7PhC**** |
Hash MD5 del archivo. Importante
Este es el hash MD5 del archivo cargado, no el hash MD5 del cuerpo de la respuesta. |
|
x-oss-hash-crc64ecma |
String |
316181249502703**** |
Valor CRC-64 del archivo. |
|
x-oss-version-id |
String |
CAEQNhiBgMDJgZCA0BYiIDc4MGZjZGI2OTBjOTRmNTE5NmU5NmFhZjhjYmY0**** |
ID de versión del objeto cargado. Se devuelve únicamente para buckets con control de versiones habilitado. |
Esta operación también devuelve Common response headers, como Date y x-oss-request-id.
Elementos de respuesta
|
Nombre |
Tipo |
Descripción |
|
PostResponse |
Contenedor |
Contenedor que almacena el resultado de la solicitud Post. Nodos secundarios: Bucket, ETag, Key y Location |
|
Bucket |
String |
Nombre del bucket. Nodo principal: PostResponse |
|
ETag |
String |
ETag del objeto cargado. Para cargas con PostObject, el ETag es un identificador único, pero no es el hash MD5 del contenido. Úselo para comprobar si el contenido ha cambiado. Nodo principal: PostResponse |
|
Location |
String |
URL del objeto recién creado. Nodo principal: PostResponse |
Ejemplos
-
Ejemplo de solicitud:
POST / HTTP/1.1 Host: oss-example.oss-cn-hangzhou.aliyuncs.com Content-Length: 344606 Content-Type: multipart/form-data; boundary=9431149156168 --9431149156168 Content-Disposition: form-data; name="key" /user/a/objectName.txt --9431149156168 Content-Disposition: form-data; name="success_action_status" 200 --9431149156168 Content-Disposition: form-data; name="Content-Disposition" content_disposition --9431149156168 Content-Disposition: form-data; name="x-oss-meta-uuid" uuid --9431149156168 Content-Disposition: form-data; name="x-oss-meta-tag" metadata --9431149156168 Content-Disposition: form-data; name="OSSAccessKeyId" 44CF9590006BF252**** --9431149156168 Content-Disposition: form-data; name="policy" eyJleHBpcmF0aW9uIjoiMjAxMy0xMi0wMVQxMjowMDowMFoiLCJjb25kaXRpb25zIjpbWyJjb250ZW50LWxlbmd0aC1yYW5nZSIsIDAsIDEwNDg1NzYwXSx7ImJ1Y2tldCI6ImFoYWhhIn0sIHsiQSI6ICJhIn0seyJrZXkiOiAiQUJDIn1dfQ== --9431149156168 Content-Disposition: form-data; name="Signature" kZoYNv66bsmc10+dcGKw5x2P**** --9431149156168 Content-Disposition: form-data; name="file"; filename="MyFilename.txt" Content-Type: text/plain abcdefg --9431149156168 Content-Disposition: form-data; name="submit" Upload to OSS --9431149156168-- -
Ejemplo de respuesta:
HTTP/1.1 200 OK x-oss-request-id: 61d2042d-1b68-6708-5906-33d81921362e Date: Fri, 24 Feb 2014 06:03:28 GMT ETag: "5B3C1A2E053D763E1B002CC607C5****" Connection: keep-alive Content-Length: 0 x-oss-hash-crc64ecma: 316181249502703**** Content-MD5: 1B2M2Y8AsgTpgAmY7PhC**** Server: AliyunOSS
SDK
SDK compatibles:
Códigos de error
|
Código de error |
Código de estado HTTP |
Descripción |
|
FieldItemTooLong |
400 |
El tamaño de la clave del campo de formulario no puede superar los 8 KB, y el tamaño del valor del campo no puede superar los 2 MB. |
|
InvalidArgument |
400 |
Independientemente de la ACL del bucket, si se proporciona OSSAccessKeyId, policy o Signature, los tres son obligatorios. La ausencia de cualquiera de ellos devuelve este error. |
|
InvalidDigest |
400 |
El Content-MD5 en la solicitud no coincide con el hash MD5 calculado por OSS para el cuerpo de la solicitud. |
|
EntityTooLarge |
400 |
El cuerpo de la solicitud supera el límite de tamaño de 5 GB. |
|
InvalidEncryptionAlgorithmError |
400 |
El valor de x-oss-server-side-encryption no es AES256 or KMS. |
|
IncorrectNumberOfFilesInPOSTRequest |
400 |
Una solicitud PostObject solo puede contener un campo de formulario file. |
|
FileAlreadyExists |
409 |
Existe un objeto con el mismo nombre y x-oss-forbid-overwrite está establecido en true. |
|
KmsServiceNotEnabled |
403 |
x-oss-server-side-encryption está establecido en KMS, pero no ha adquirido previamente un paquete de KMS. |
|
FileImmutable |
409 |
El bucket está protegido y los datos no pueden eliminarse ni modificarse. |
|
MethodNotAllowed |
405 |
El método de solicitud HTTP no es compatible. Compruebe que el método de solicitud, los encabezados, el protocolo de URL, el nombre de dominio y la ruta sean correctos. |
Política POST
El campo de formulario policy es una política de seguridad en formato JSON que especifica restricciones para las cargas mediante formularios HTML, incluido el nombre del bucket, el prefijo del objeto, el periodo de validez, los métodos HTTP permitidos, los límites de tamaño de carga y los tipos de contenido.
Política de firma V4: POST request V4 signature policy.
Política de firma V1: POST request V1 signature policy.
Firma POST
Cada solicitud PostObject debe incluir una firma para la autenticación.
Firma V4: POST request V4 signature.
Firma V1: POST request V1 signature.
Preguntas frecuentes
¿Qué debo hacer si se devuelve el error "Your proposed upload exceeds the maximum allowed size"?
Causa: El tamaño del archivo cargado está fuera del rango especificado por content-length-range.
Solución: Utilice content-length-range para especificar los tamaños mínimo y máximo permitidos para el archivo cargado, en bytes. Por ejemplo, para cargar un archivo de 1 GB, puede establecer content-length-range como ["content-length-range", 1, 1073741824].