Skip to content
DataMiner DoJo

More results...

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Search in posts
Search in pages
Search in posts
Search in pages
Log in
Menu
  • Blog
  • Questions
  • Learning
    • E-learning Courses
    • Open Classroom Training
    • Certification
      • DataMiner Fundamentals
      • DataMiner Configurator
      • DataMiner Automation
      • Scripts & Connectors Developer: HTTP Basics
      • Scripts & Connectors Developer: SNMP Basics
      • Visual Overview – Level 1
      • Verify a certificate
    • Tutorials
    • Video Library
    • Books We Like
    • >> Go to DataMiner Docs
  • Expert Center
    • Solutions & Use Cases
      • Solutions
      • Use Case Library
    • Markets & Industries
      • Media production
      • Government & defense
      • Content distribution
      • Service providers
      • Partners
      • OSS/BSS
    • DataMiner Insights
      • Security
      • Integration Studio
      • System Architecture
      • DataMiner Releases & Updates
      • DataMiner Apps
    • Agile
      • Agile Webspace
      • Everything Agile
        • The Agile Manifesto
        • Best Practices
        • Retro Recipes
      • Methodologies
        • The Scrum Framework
        • Kanban
        • Extreme Programming
      • Roles
        • The Product Owner
        • The Agile Coach
        • The Quality & UX Coach (QX)
    • DataMiner DevOps Professional Program
  • Downloads
  • More
    • Feature Suggestions
    • Climb the leaderboard!
    • Swag Shop
    • Contact
      • General Inquiries
      • DataMiner DevOps Support
      • Commercial Requests
    • Global Feedback Survey
  • PARTNERS
    • All Partners
    • Technology Partners
    • Strategic Partner Program
    • Deal Registration
  • >> Go to dataminer.services

HTTP binary data upload

Solved1.18K views25th January 2024binary HTTP upload
3
Jelle Hoorne [SLC] [DevOps Member]197 24th January 2024 0 Comments

I'm trying to upload a binary (mp3) file using an HTTP post session.

The file is read-out using File.ReadAllBytes and the content bytes are set on the session data parameter using protocol.SetParameterBinary

To test this upload I've created a dummy mp3 file containing some simple binary content (Hex 02 01 00 02 00). Using this file I can easily perform an upload via the Web Interface and compare the request payload with the payload send via protocol communication.

The request via the Web Interface gives the expected result:

However when performing the same call via protocol it seems the payload data is completely different and I'm even losing a byte along the way.

I'm certain the protocol.SetParameterBinary call works correctly and my session content parameter is filled in with the correct binary data (I've performed a Set and Get count on the bytes and the result was identical: 5 bytes)

I have a feeling SLPort is changing the content somehow by possible adding some extra encoding to the data, but it would be nice if someone could confirm this?

I've implemented and performed the same HTTP upload request directly from QAction (bypassing SLPort) and everything works perfectly, which only confirms my SLPort suspicion.

Am I missing something, or can somebody confirm the above?

Jelle Hoorne [SLC] [DevOps Member] Selected answer as best 25th January 2024

2 Answers

  • Active
  • Voted
  • Newest
  • Oldest
2
Tom Waterbley [SLC] [DevOps Catalyst]8.86K Posted 25th January 2024 5 Comments

Hi Jelle,

When the Content-Type header doesn't contain a charset, the data is automatically encoded as UTF-8. In this case that's not desired because you want to send the raw binary data without any conversions. This can be achieved by adding a charset so the Content-Type header.

Example:

<Header key="Content-Type">text/plain; charset=ISO-8859-1</Header>

More details can be found here: https://docs.dataminer.services/develop/schemadoc/Protocol/Protocol.HTTP.Session.Connection.Request.Headers.Header.html#remarks

Jeroen Neyt [SLC] [DevOps Advocate] Posted new comment 25th January 2024
Jelle Hoorne [SLC] [DevOps Member] commented 25th January 2024

Hi Tom, Awesome this works!
However based on the release note does this mean that it doesn’t matter which charset I provide, as long as it’s different from UTF-8 SLPort will not do any conversion?

Tom Waterbley [SLC] [DevOps Catalyst] commented 25th January 2024

Glad to hear that it did the trick. I think you can indeed specify any charset to disable the conversion.

Laurens Moutton [SLC] [DevOps Enabler] commented 25th January 2024

Indeed, when looking at the source code I can see when the charset is specified, and not equal to “utf-8”, that it will not do any conversion. The only tricky part is what the receiving side thinks about that as we’re indicating that a charset is being used while it are actually mp3 bytes. Glad to see that it is working in your case.

Tom Waterbley [SLC] [DevOps Catalyst] commented 25th January 2024

It indeed doesn’t really make sense in this case and could indeed potentially cause problems at the receiving side. It would be better to have an additional flag to indicate that the data should be sent as it is.

Jeroen Neyt [SLC] [DevOps Advocate] commented 25th January 2024

The RFC for the octet-stream subtype (https://www.iana.org/assignments/media-types/application/octet-stream) has no registration for a charset parameter. That makes it a lot less likely that webservers will interpret it.

I agree though that it looks odd to define it as such but to this day it is the only workaround to avoid conversion on the payload.

0
Laurens Moutton [SLC] [DevOps Enabler]8.70K Posted 25th January 2024 1 Comment

Hi Jelle,

Internally there are 2 types of parameters: a double or a string. In this case a string is being used and is interpreted as such. The bytes that are sent are tried to be looked at as characters and that can cause "translation" problems when going back and forth between (unicode) character encodings and their bytes, which is what you're probably seeing here. Something that might be tried is to make your protocol a unicode protocol, but this is just a long shot and no guarantee at all that this will work.

Regards,

Jelle Hoorne [SLC] [DevOps Member] Posted new comment 25th January 2024
Jelle Hoorne [SLC] [DevOps Member] commented 25th January 2024

Hi Laurens, thanks for the feedback. Unfortunately the protocol is already defined as ‘unicode’.

Please login to be able to comment or post an answer.

My DevOps rank

DevOps Members get more insights on their profile page.

My user earnings

0 Dojo credits

Spend your credits in our swag shop.

0 Reputation points

Boost your reputation, climb the leaderboard.

Promo banner DataMiner DevOps Professiona Program
DataMiner Integration Studio (DIS)
Empower Katas

Recent questions

Correlation Engine: “Test rule” doesn’t result in a hit, despite functional rule 1 Answer | 3 Votes
When using the Setter = true attribute, will the copy action always be executed first? 1 Answer | 2 Votes
Multiple Set on Table parameters for DVE’s 1 Answer | 2 Votes

Question Tags

adl2099 (115) alarm (62) Alarm Console (82) alarms (100) alarm template (83) Automation (223) automation scipt (111) Automation script (167) backup (71) Cassandra (180) Connector (109) Correlation (69) Correlation rule (52) Cube (150) Dashboard (194) Dashboards (188) database (83) DataMiner Cube (57) DIS (81) DMS (71) DOM (140) driver (65) DVE (56) Elastic (83) Elasticsearch (115) elements (80) Failover (104) GQI (159) HTTP (76) IDP (74) LCA (152) low code app (166) low code apps (93) lowcodeapps (75) MySQL (53) protocol (203) QAction (83) security (88) SNMP (86) SRM (337) table (54) trending (87) upgrade (62) Visio (539) Visual Overview (345)
Privacy Policy • Terms & Conditions • Contact

© 2025 Skyline Communications. All rights reserved.

DOJO Q&A widget

Can't find what you need?

? Explore the Q&A DataMiner Docs

[ Placeholder content for popup link ] WordPress Download Manager - Best Download Management Plugin