Datei uploaden mit WINNET?

Die Daten der Datei müssen entsprechend deiner Angabe von multipart/form-data eben auch in diesem Format sein, d.h. du mußt diese Daten in eine MIME Nachricht entsprechend RFC 2045 verpacken.

Das ist doch aber alles genau - sogar mit Beispiel - hier erklärt.

Durch Selbstrecherche hab ich eine Übersicht über die MIME-Typen hiergefunden.
Soll in meiner .bin Datei am Kopf so was enthalten sein?

HTML:
   Content-Type: application/octet-stream; boundary=AaB03x

   --AaB03x
   Content-Disposition: application/octet-stream; name="userfile2"; filename="xxx.bin"
   Content-Type: text/plain

   ... contents of file1.txt ...
   --AaB03x--

Wenn ja, dann frage ich mich, wie ich den Inhalt meiner .bin Datei bearbeiten kann (mit welcher Software, UltraEdit vielleicht)?
 
Ich bin fast verwirrt...

Wenn im .htm Skript schon "multipart/form-data" steht, soll diese Formatierung dann in der .bin Datei auch eingehalten, oder?

Dann macht "application/octet-stream" keinen sinn mehr...
 
Durch Selbstrecherche hab ich eine Übersicht über die MIME-Typen hiergefunden.
Soll in meiner .bin Datei am Kopf so was enthalten sein?
Nein. Wozu? Du willst die Daten der Datei versenden. Dazu mußt du dich an das Protokoll halten und diese Daten in einen MIME "Umschlag" packen. Der MIME-Typ der Datei ist dabei das geringste Problem. Wenn du den nicht ermitteln kannst oder willst, dann übergib halt einfach "application/octet-stream".
HTML:
   Content-Type: application/octet-stream; boundary=AaB03x

   --AaB03x
   Content-Disposition: application/octet-stream; name="userfile2"; filename="xxx.bin"
   Content-Type: text/plain

   ... contents of file1.txt ...
   --AaB03x--

Wenn ja, dann frage ich mich, wie ich den Inhalt meiner .bin Datei bearbeiten kann (mit welcher Software, UltraEdit vielleicht)?
Wieso bearbeiten? Du erzeugst einfach ad hoc eine MIME Nachricht mit den Daten deiner Datei drin. \edit: es müßte also so aussehen:
Code:
Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="userfile2"; filename="xxx.bin"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

... contents of file.bin ...
--AaB03x--
Ich bin fast verwirrt...

Wenn im .htm Skript schon "multipart/form-data" steht, soll diese Formatierung dann in der .bin Datei auch eingehalten, oder?

Dann macht "application/octet-stream" keinen sinn mehr...
multipart/form-data ist das Format der ganzen Nachricht. application/octet-stream ist das Format des Teils der Nachricht welches die Daten der Datei enthält.

Gruß
 
Zuletzt bearbeitet:
Wieso bearbeiten? Du erzeugst einfach ad hoc eine MIME Nachricht mit den Daten deiner Datei drin. \edit: es müßte also so aussehen:
Code:
Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="userfile2"; filename="xxx.bin"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary

... contents of file.bin ...
--AaB03x--

multipart/form-data ist das Format der ganzen Nachricht. application/octet-stream ist das Format des Teils der Nachricht welches die Daten der Datei enthält.

OK, aber wo kommt diese Formatierung hinein?
Wenn nicht in die .bin Datei, in meinen C++ Code vielleicht?
 
Hallo,

durch mehrere Versuche habe ich es geschafft. Unten ist der lauffähige Code von mir vielleicht für jemanden der das gleiche Problem wie ich haben könnte.

C++:
void Upload(string strIP, string strUploadFile)
{
	string tmpIP = strIP;
	string tmpUploadFile = strUploadFile;

	HINTERNET inet = InternetOpen("HTTP Upload", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
               
	if(inet == NULL)
		cout << "InternetOpen error: " << GetLastError() << endl;
	else
    {    
		HINTERNET connection    = NULL;
		HINTERNET request       = NULL;
		unsigned long flags     = INTERNET_FLAG_PRAGMA_NOCACHE;

		connection = InternetConnect(inet,
									tmpIP.c_str(),
                                     INTERNET_DEFAULT_HTTP_PORT,
                                     0, //String
                                     0,  //String
                                     INTERNET_SERVICE_HTTP,
                                     0,
									 1);

                        
		if(connection == NULL)
		
			cout << "InternetConnect error: " << GetLastError() << endl;
		else

		{                         
			const char* AccessedType = "*/*";  

			
				request = HttpOpenRequest(connection,                                                         
									  "POST",
                                      "upload",
									  NULL,       //HTTP standard Version
                                      //Referer,
									  NULL,      //keine Referenz
                                      &AccessedType,
                                      INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_PRAGMA_NOCACHE,
									  NULL);

				if(request == NULL)
					cout << "HttpOpenRequest error: " << GetLastError() << endl;
	
				else
				{
					string strWrapedFile;
					strWrapedFile = WrapFile(tmpUploadFile);	
			
					const char* chContentType = "ContentType: multipart/form-data; boundary=-----------------------------7da35984070a\r\n";  



					if(HttpSendRequest(request,
						chContentType,
						-1L,//strlen(ContentType), 
						(void*)(strWrapedFile.data()), 
						strWrapedFile.size())== NULL)
						cout << "HttpSendRequest error: " << GetLastError() << endl;
				}

				InternetCloseHandle(request);                        
				InternetCloseHandle(connection);                        
				InternetCloseHandle(inet);
		}		
}		
}

Zum Schluss danke ich euch allen nochmal und bis nächstes Mal.;)
 
Zurück