<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[BCB6: Binäre Datei per TClientSocket versenden]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe scheinbar ein einfaches Problem, über das ich nicht hinweg komme. *Brett vor dem Kopf hab* Ich arbeite mit dem BCB6 und möchte eine binäre Datei auf einen Apache Webserver hochladen. Dazu verwende ich den TClientSocket.</p>
<p>Hier ein Auszug aus meinem Code:</p>
<pre><code>// Datei Binär lesen
        Datei = fopen(&quot;D:\\test.jpg&quot;,&quot;rb&quot;);
        fseek(Datei, 0, SEEK_END );             //Dateizeiger ans Ende setzen
        size_t fileSize = ftell(Datei);         //Dateizeiger abfragen
        fseek(Datei, 0, SEEK_SET );             //Dateizeiger wieder an den Anfang setzen

        Memo1-&gt;Lines-&gt;Add(&quot;Größe: &quot; + AnsiString(fileSize));

        Char ch[1024];
        Memo1-&gt;Lines-&gt;Add(&quot;Dateizeigerposition ----------&quot; + AnsiString(ftell(Datei)));

        while((Steps=fread(ch, 1024, 1, Datei)) &gt;0)
         {
         Memo1-&gt;Lines-&gt;Add(&quot;Dateizeigerposition ----------&quot; + AnsiString(ftell(Datei)));
         Memo1-&gt;Lines-&gt;Add(&quot;Ausgabe ----------&quot; + AnsiString(Steps));

         // Hier fehlt Code!!!
         // Variable &quot;DateiInhalt&quot; (AnsiString) füllen

         }

        fclose(Datei);

        // Datenblock wird zusammengesetzt und Länge bestimmt.
        TextSend = &quot;-----------------------------30218195929843\r\n&quot;;
        TextSend += &quot;Content-Disposition: form-data; name=\&quot;userfile\&quot;; filename=\&quot;test.jpg\&quot;\r\n&quot;;
        TextSend += &quot;Content-Type: application/x-msdownload\r\n\r\n&quot;;
        TextSend += DateiInhalt + &quot;\r\n&quot;;
        TextSend += &quot;-----------------------------30218195929843\r\n&quot;;
        Laenge = strlen(TextSend.c_str());

        // Daten werden hier gesendet
        Memo1-&gt;Lines-&gt;Add(&quot;Verbindung hergestellt.&quot;);
        Socket-&gt;SendText(&quot;POST /index.php HTTP/1.1\r\n&quot;);
        Socket-&gt;SendText(&quot;Host: localhost\r\n&quot;);
        Socket-&gt;SendText(&quot;Content-Type: multipart/form-data; boundary=---------------------------30218195929843\r\n&quot;);
        Socket-&gt;SendText(&quot;Content-Length: &quot; + AnsiString(Laenge) + &quot;\r\n\r\n&quot;);
        Socket-&gt;SendText(TextSend);
        Memo1-&gt;Lines-&gt;Add(&quot;Verbindung beendet.&quot;);
</code></pre>
<p>Hoffe keiner schlägt jetzt die Hände über dem Kopf zusammen, was ich da so mache. Ist aber kein produktiver Code sondern einfach nur zum Testen.</p>
<p>Nu aber zu meinem Problem: Wie man dem Quellcode entnehmen kann lese ich die Daten aus der Datei (Funktioniert). Nun möchte ich den AnsiString &quot;DateiInhalt&quot; füllen und dann weiter unten einbinden und versenden. Wie bekomme ich die eingelesenen binären Daten in meinen AnsiString? Geht das überhaupt?</p>
<pre><code>DatenInhalt += ch;
</code></pre>
<p>... geht ja schon mal nicht. Die Datei wird dabei unvollständig gesendet und empfangen. Wie muss/kann ich also diese Daten übernehmen? Denke ich zu kompliziert?</p>
<p>Vielen Dank für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142288/bcb6-binäre-datei-per-tclientsocket-versenden</link><generator>RSS for Node</generator><lastBuildDate>Tue, 04 Aug 2026 02:26:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142288.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Mar 2006 09:31:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to BCB6: Binäre Datei per TClientSocket versenden on Wed, 29 Mar 2006 14:16:40 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe scheinbar ein einfaches Problem, über das ich nicht hinweg komme. *Brett vor dem Kopf hab* Ich arbeite mit dem BCB6 und möchte eine binäre Datei auf einen Apache Webserver hochladen. Dazu verwende ich den TClientSocket.</p>
<p>Hier ein Auszug aus meinem Code:</p>
<pre><code>// Datei Binär lesen
        Datei = fopen(&quot;D:\\test.jpg&quot;,&quot;rb&quot;);
        fseek(Datei, 0, SEEK_END );             //Dateizeiger ans Ende setzen
        size_t fileSize = ftell(Datei);         //Dateizeiger abfragen
        fseek(Datei, 0, SEEK_SET );             //Dateizeiger wieder an den Anfang setzen

        Memo1-&gt;Lines-&gt;Add(&quot;Größe: &quot; + AnsiString(fileSize));

        Char ch[1024];
        Memo1-&gt;Lines-&gt;Add(&quot;Dateizeigerposition ----------&quot; + AnsiString(ftell(Datei)));

        while((Steps=fread(ch, 1024, 1, Datei)) &gt;0)
         {
         Memo1-&gt;Lines-&gt;Add(&quot;Dateizeigerposition ----------&quot; + AnsiString(ftell(Datei)));
         Memo1-&gt;Lines-&gt;Add(&quot;Ausgabe ----------&quot; + AnsiString(Steps));

         // Hier fehlt Code!!!
         // Variable &quot;DateiInhalt&quot; (AnsiString) füllen

         }

        fclose(Datei);

        // Datenblock wird zusammengesetzt und Länge bestimmt.
        TextSend = &quot;-----------------------------30218195929843\r\n&quot;;
        TextSend += &quot;Content-Disposition: form-data; name=\&quot;userfile\&quot;; filename=\&quot;test.jpg\&quot;\r\n&quot;;
        TextSend += &quot;Content-Type: application/x-msdownload\r\n\r\n&quot;;
        TextSend += DateiInhalt + &quot;\r\n&quot;;
        TextSend += &quot;-----------------------------30218195929843\r\n&quot;;
        Laenge = strlen(TextSend.c_str());

        // Daten werden hier gesendet
        Memo1-&gt;Lines-&gt;Add(&quot;Verbindung hergestellt.&quot;);
        Socket-&gt;SendText(&quot;POST /index.php HTTP/1.1\r\n&quot;);
        Socket-&gt;SendText(&quot;Host: localhost\r\n&quot;);
        Socket-&gt;SendText(&quot;Content-Type: multipart/form-data; boundary=---------------------------30218195929843\r\n&quot;);
        Socket-&gt;SendText(&quot;Content-Length: &quot; + AnsiString(Laenge) + &quot;\r\n\r\n&quot;);
        Socket-&gt;SendText(TextSend);
        Memo1-&gt;Lines-&gt;Add(&quot;Verbindung beendet.&quot;);
</code></pre>
<p>Hoffe keiner schlägt jetzt die Hände über dem Kopf zusammen, was ich da so mache. Ist aber kein produktiver Code sondern einfach nur zum Testen.</p>
<p>Nu aber zu meinem Problem: Wie man dem Quellcode entnehmen kann lese ich die Daten aus der Datei (Funktioniert). Nun möchte ich den AnsiString &quot;DateiInhalt&quot; füllen und dann weiter unten einbinden und versenden. Wie bekomme ich die eingelesenen binären Daten in meinen AnsiString? Geht das überhaupt?</p>
<pre><code>DatenInhalt += ch;
</code></pre>
<p>... geht ja schon mal nicht. Die Datei wird dabei unvollständig gesendet und empfangen. Wie muss/kann ich also diese Daten übernehmen? Denke ich zu kompliziert?</p>
<p>Vielen Dank für eure Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1026253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1026253</guid><dc:creator><![CDATA[mymicha]]></dc:creator><pubDate>Wed, 29 Mar 2006 14:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to BCB6: Binäre Datei per TClientSocket versenden on Wed, 29 Mar 2006 10:41:26 GMT]]></title><description><![CDATA[<p>Eine Datei hat in einem AnsiString nichts zusuchen. Eine Datei wird in eine Speicherbereich geladen oder per Stream verarbeitet.</p>
<p>Warum nicht der Upload mit Indy und TidFTP?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1026310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1026310</guid><dc:creator><![CDATA[Christian211]]></dc:creator><pubDate>Wed, 29 Mar 2006 10:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to BCB6: Binäre Datei per TClientSocket versenden on Wed, 29 Mar 2006 11:14:10 GMT]]></title><description><![CDATA[<p>Danke für deinen Tip. Indy hatte ich bisher einfach nicht verwendet, das wird sich aber ab JETZT ändern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Mal schauen, wie es da so klappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1026343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1026343</guid><dc:creator><![CDATA[mymicha]]></dc:creator><pubDate>Wed, 29 Mar 2006 11:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to BCB6: Binäre Datei per TClientSocket versenden on Wed, 29 Mar 2006 14:15:44 GMT]]></title><description><![CDATA[<p>Vielen Dank noch mal. Hat wunderbar funktioniert. Hier meine kleine Testlösung. Einige Fallstricke waren doch noch dabei - Stichwort: Content-Type<br />
Ich habe hier die TIdHTTP Komponente verwendet. Der Content-Type wurde von mir auf:<br />
multipart/form-data; boundary=---------------------------30218195929843<br />
gesetzt.</p>
<pre><code class="language-cpp">Memo1-&gt;Lines-&gt;Add(&quot;Connect wird ausgeführt ...&quot;);

        TMemoryStream *InStream=new TMemoryStream();
        TMemoryStream *OutStream=new TMemoryStream();

        // Datenblock wird zusammengesetzt und Länge bestimmt.
        AnsiString TextSend;
        TextSend = &quot;-----------------------------30218195929843\r\n&quot;;
        TextSend += &quot;Content-Disposition: form-data; name=\&quot;userfile\&quot;; filename=\&quot;bild.jpg\&quot;\r\n&quot;;
        TextSend += &quot;Content-Type: application/x-msdownload\r\n\r\n&quot;;
        OutStream-&gt;Write(TextSend.c_str(), strlen(TextSend.c_str()));

        fstream FileBin(&quot;d:\\bild.jpg&quot;, ios::in|ios::out|ios::binary);
        if (FileBin.is_open())
         {
         FileBin.seekg(0, ios::end);
         unsigned long FileSize = streamoff(FileBin.tellg());
         FileBin.seekg(0, ios::beg);

         char* pBuffer = new char[FileSize];
         FileBin.read(pBuffer, FileSize);
         OutStream-&gt;Write(pBuffer, FileSize);

         delete [] pBuffer;
         }

        TextSend = &quot;\r\n-----------------------------30218195929843\r\n&quot;;
        OutStream-&gt;Write(TextSend.c_str(), strlen(TextSend.c_str()));

        HC-&gt;Post(&quot;http://localhost/index.php?Get=3&quot;, OutStream, InStream);

        InStream-&gt;Position=0;
        Memo1-&gt;Lines-&gt;LoadFromStream(InStream);

        delete OutStream;
        delete InStream;
</code></pre>
<p>Ich hoffe ich konnte damit dem einen oder anderen auch noch helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1026545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1026545</guid><dc:creator><![CDATA[mymicha]]></dc:creator><pubDate>Wed, 29 Mar 2006 14:15:44 GMT</pubDate></item></channel></rss>