Azure IoT中心客户端-如何以应用程序/ json格式上传文件

时间:2018-11-17 06:46:30

标签: azure content-type azure-iot-hub

我有Azure IoT中心Python。尝试通过此例程上传文件

def iothub_file_upload_sample_run():
try:
    print ( "IoT Hub file upload sample, press Ctrl-C to exit" )
    client = IoTHubClient(CONNECTION_STRING, PROTOCOL)      

    f = open(PATHTOFILE, "r")
    content = f.read()

    client.upload_blob_async(FILENAME, content, len(content), blob_upload_conf_callback)

    print ( "" )
    print ( "File upload initiated..." )

这可以正常工作,但是文件内容类型为“ application / octet-stream”

我去了一些帖子,并尝试通过如下添加“ client.set_options('auto_url_encode_decode',True)”

def iothub_file_upload_sample_run():
try:
    print ( "IoT Hub file upload sample, press Ctrl-C to exit" )

    client = IoTHubClient(CONNECTION_STRING, PROTOCOL)
    client.set_options('auto_url_encode_decode', True)

    f = open(PATHTOFILE, "r")
    content = f.read()

    client.upload_blob_async(FILENAME, content, len(content), blob_upload_conf_callback)

    print ( "" )
    print ( "File upload initiated..." )


But the response message is 
File:C:\Release\iot-sdks- 
internals\release\python\automation\aziotsdk_pytools\src\c\c- 
utility\adapters\httpapi_winhttp.c Func:HTTPAPI_CloneOption Line:1046 
unknown option auto_url_encode_decode

未知选项auto_url_encode_decode和协议为HTTP

不确定这是否是Azure IoT中心Python的默认发送默认应用程序/八位字节流的限制

任何指针将不胜感激

2 个答案:

答案 0 :(得分:0)

不幸的是,似乎 Python SDK 调用了不支持设置内容类型的IoTHubClient_UploadToBlobAsync方法。

您可以使用服务器端触发的专用组件(例如 Azure功能)将 Azure Blob 的内容类型更改为正确的内容类型(请参见{{ 3}}和BlockBlobService class)。

希望有帮助!

答案 1 :(得分:0)

IoTHubClient_UploadToBlobAsync 方法的另一种替代方法是使用REST API调用。以下步骤显示了此顺序:

  1. 发布到Create File Upload Sas Uri
  2. 将其上传到Blob文件
  3. 发布到Update File Upload Status

请注意,第2步可以处理上传过程的全部要求,例如元数据,属性,内容等。