Simple cURL REST POST and python MQTT receiver to move a file across solace.
Curl Sender
- Create directory with files for sending: ‘sender’
- Add password to ‘restpass’ variable
resthost=mr1nljqp0y2dox.messaging.solace.cloud
restport=9000
restuser=solace-cloud-client
restpass=password
filemask=./sender/*
for filepath in $filemask
do
# List all the files in subdirectory
file=$(basename $filepath)
curl -v -u $restuser:$restpass \
-X POST http://$resthost:$restport/file/upload/binary/$file \
-H "Solace-User-Property-File-Name: '"$file"'" \
-H "Content-Type: application/octet-stream" \
--data-binary @$filepath
done
Python MQTT Listener to file
- Create directory ‘receiver’
- add password to username_pw_set
import paho.mqtt.client as mqtt
import os
def on_log(client, userdata, level, buf):
print("log: ",buf)
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe("file/#")
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
#print(msg.topic)
#print("")
filename="receiver/" + os.path.basename(msg.topic)
print("Writing:"+filename)
f=open(filename,"wb")
f.write(msg.payload)
f.close()
client = mqtt.Client()
client.on_log=on_log
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username="solace-cloud-client", password="password")
client.connect("mr1nljqp0y2dox.messaging.solace.cloud", 1883, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
client.loop_forever()