azure - No se ha podido subir el archivo(imagen n vdo) al almacenamiento de blob, obteniendo el error: falta el encabezado obligatorio "x-ms-blob-type"
upload header (2)
A pesar de que funcionó para usted hace 2 días, ¿podría intentar agregar los encabezados necesarios de esta página (como x-ms-date por ejemplo).
Intento subir una imagen al almacenamiento de blobs azul, hace 2 días el código funcionaba perfectamente pero recientemente recibí el error de que falta un encabezado de solicitud obligatorio. Lo siguiente es el error devuelto:
"<?xml version=/"1.0/" encoding=/"utf-8/"?><Error><Code>MissingRequiredHeader</Code><Message>An HTTP header that''s mandatory for this request is not specified./nRequestId:93cefc02-45af-41b0-9cb5-649d485faa49/nTime:2012-10-03T09:05:58.1982699Z</Message><HeaderName>x-ms-blob-type</HeaderName></Error>"
Déjame explicar el flujo del programa. Estoy usando un servidor nodejs para crear un SAS desde azul. Este sas lo usa el cliente de Windows 8 para PONER el archivo específico en el almacenamiento de blob.
function uploadFileAsync(uploadURL, file) {
return new WinJS.Promise(function (complete, error, progress) {
file.openAsync(Windows.Storage.FileAccessMode.read).then(function (stream) {
makeBlob(file.contentType, stream).then(function (blob) {
WinJS.xhr({ url: uploadURL, type: "PUT", data: blob, headers: { "Content-type":
file.contentType} }).then(function (res) {
complete(res);
}, function (err) {
error(err);
});
});
});
});
}
function makeBlob(contentType, stream) {
return new WinJS.Promise(function (c, e) {
var blob = window.MSApp.createBlobFromRandomAccessStream(contentType, stream);
c(blob);
});
}
uploadURL es el SAS del servidor de nodos.
Intenté agregar otro encabezado "x-ms-blob-type": "BlockBlob"
con la solicitud PUT, pero ¡ay de nada!
WinJS.xhr({ url: uploadURL, type: "PUT", data: blob, headers: { "Content-type":
file.contentType, "x-ms-blob-type": "BlockBlob" } }).then(function (res) {
Mi equipo y yo hemos intentado cargarlo desde varias instalaciones, utilizando las versiones más básicas (más antiguas) de nuestra aplicación que funcionaban perfectamente antes. De esto concluimos que algo debe haber cambiado en el nivel azul. ¡Por favor avise!
ACTUALIZACIÓN: Finalmente lo hizo funcionar de nuevo, agregando el encabezado x-ms-blob-type hizo el truco esta vez. Fiddler fue realmente una gran ayuda, gracias Gaurav ...
Sin embargo, usar Fiddler me reveló algunas cosas que aún no están claras.
1) A continuación está la solicitud y la respuesta capturadas por el violinista
Request:
PUT /dummy/Content/dummy.bmp?st=2012-10-06T06%3A53%3A49Z&se=2012-10-06T07%3A53%3A49Z&sr=dummy&sig=dummydummyNQ4%3D HTTP/1.1
Accept: */*
Filename: dummy.bmp
Content-Type: image/bmp
x-ms-blob-type: BlockBlob
Method: PUT
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)
Host: dummy.blob.core.windows.net
Content-Length: 85414
Connection: Keep-Alive
Pragma: no-cache
Response:
HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-MD5: MdRpPr+eOePkjry2+6myQg==
Last-Modified: Sat, 06 Oct 2012 06:57:45 GMT
ETag: "dummyTag"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: dummyide-f2defa18c095
x-ms-version: 2011-08-18
¿No debería ser serviceVersion 2012-02-12, porque no lo he especificado en ninguna parte? Por lo tanto, ¿no debería ser la última opción?
2) Según esta página, http://msdn.microsoft.com/en-us/library/windowsazure/dd179451.aspx x-ms-blob-type es un encabezado opcional, ¿por qué dice que es obligatorio?
PD: Agregar todos los encabezados REQUERIDOS no ayudó. Todavía decía Falta cabecera obligatoria (x-ms-blob-type).
Toco aquí buscando la forma de eliminar un blob o archivo del objeto StorageFile. Tu función makeblob me dio una pista. Gracias.
Sugiero una alternativa para la función makeblob.
function makeblob(storageFile)
{
return MSApp.createFileFromStorageFile(storageFile);
}
El sitio de llamadas también necesita cambiar un poco y llamar al archivo. OpenAsync se puede eliminar.
respecto a la llamada PUT blob api -
- sugerir que se ponga explícitamente el encabezado x-ms-version
- ¿Es su cliente sas el que hace otras cosas para poner el encabezado de autorización de la clave compartida, etc. o es una nota pública?
- También estoy resolviendo un problema similar: cliente win8, servidor nodejs, cargando imágenes al almacenamiento azul. actualmente, tengo carga directa al blob azul trabajando. Estoy explorando el uso de la firma de acceso compartido para ver si el cliente win8 puede hablar directamente con put blob api, y no ir a través del servidor nodejs (ahorre algo de carga en el servidor nodejs). no a través de la investigación aún.
HTH.