Creé un depósito donde la política hace que sea obligatorio especificar el tipo de contenido del objeto que se está cargando. Si especifico el tipo de contenido después del elemento de archivo (ejemplo a continuación)
<form action=".."> ... <input type='file' name='file' /> <input name='content-type' value='image/jpeg' /> <input type='submit' /> </form>devuelve el siguiente error
<Error> <Code>AccessDenied</Code> <Message>Invalid according to Policy: Policy Condition failed: ["starts-with", "$Content-Type", ""]</Message> <RequestId>15063EB427B4A469</RequestId> <HostId>yEzAPF4Z2inaafhcqyQ4ooLVKdwnsrwqQhnYg6jm5hPQWSOLtPTuk0t9hn+zkBEbk+rP4S5Nfvs=</HostId> </Error>Si especifico el tipo de contenido antes del elemento del archivo, la carga funciona como se esperaba. Encontré este comportamiento por primera vez. Tengo algunas preguntas al respecto.
¿Es parte de alguna especificación en la que se supone que los clientes y todos los proxies intermedios deben mantener el orden de los parámetros de publicación de http? Por favor indícamelo.
¿Por qué haría que su API esté al tanto de tales pedidos? En este caso particular, puedo suponer que el archivo puede ser enorme y, a menos que esté viendo todos los parámetros esperados antes, debería devolver un error de inmediato. Por favor, corríjame si mi comprensión no es correcta.
Es parte de la especificación que las piezas se envíen según lo ordenado en el formulario . No hay razón para creer que se permitiría reordenar por un proxy intermedio.
Los datos y límites del formulario (excluyendo el contenido del archivo) no pueden exceder los 20K.
...
El archivo o contenido debe ser el último campo del formulario.
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTForms.html#sigv4-HTTPPOSTFormFields
La suposición lógica es que este diseño permite que S3 rechace las cargas no válidas antes de tiempo.