Azure PageBlob 上传新文件:x-ms-blob-content-length 错误

Azure PageBlob upload a new file: x-ms-blob-content-length error

我正在尝试编写一个简单的 python 代码来将文件上传到 Azure PageBlob。我不确定应该为 x-ms-blob-content-length 指定什么,因为我不断收到错误消息。 The documentation不是很清楚

我的代码试图用 0 向左填充文件以确保其在 512 字节边界内,但我不知道我是否在正确的路径上。谢谢。

import sys
import os
import http.client
from urllib.parse import urlparse

sas_uri = '<SAS URI here>'
uri = urlparse(sas_uri)

conn = http.client.HTTPSConnection(uri.hostname, port=uri.port, timeout=3000)

file_path = r"C:\Users\user\Downloads\npp.Installer.exe"

with open(file_path, 'rb') as reader:
    file = reader.read()

    size = os.stat(file_path).st_size
    boundary = size % 512
    if boundary != 0:
        file = file.ljust(boundary, b'[=10=]')
        size = size + boundary
    headers = {
        'Content-Type': 'application/octet-stream',
        'Content-Length': 0,
        'x-ms-blob-type': 'PageBlob',
        'x-ms-blob-content-length': size
    }

    conn.request('PUT', sas_uri, file, headers)

    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))

错误:

Connected to pydev debugger (build 211.7142.13)
<?xml version="1.0" encoding="utf-8"?>
<Error><Code>InvalidHeaderValue</Code><Message>The value for one of the HTTP headers is not in the correct format.
RequestId:44c84519-501c-0004-5ecc-937c22000000
Time:2021-08-18T00:57:43.5973565Z</Message><HeaderName>x-ms-blob-content-length</HeaderName><HeaderValue>3991344</HeaderValue></Error>

基本上问题出在以下代码行:

size = size + boundary

如果你用这个数除以 512,你会发现这个数不能被 512 整除。

为了将页面 blob 的内容长度设置为 512 的倍数,您需要使用以下逻辑:

size = size + 512 - boundary

请试一试。它应该可以工作。