Heim  >  Artikel  >  Java  >  Wie kann ich Dateien und Parameter mit reinem Java auf einen HTTP-Server hochladen, ohne auf Bibliotheken von Drittanbietern angewiesen zu sein?

Wie kann ich Dateien und Parameter mit reinem Java auf einen HTTP-Server hochladen, ohne auf Bibliotheken von Drittanbietern angewiesen zu sein?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 04:11:29785Durchsuche

How can I upload files and parameters to an HTTP server using pure Java without relying on third-party libraries?

HTTP-Server-Datei-Uploads mit Java

Einführung

In diesem Artikel geht es um das Hochladen von Dateien auf einen HTTP-Server von einem Java-Client. Unser Ziel ist es, eine einfache und kostenlose Lösung bereitzustellen, die Parameter und Dateien innerhalb einer POST-Anfrage kombiniert.

Multipart/Form-Data-Codierung

Für gemischte POST-Inhalte (binär und Zeichendaten), wird in der Regel eine Multipart-/Form-Datenkodierung verwendet. Die Daten sind in Abschnitte unterteilt, jeder mit seinem eigenen Header und Textkörper.

Java-Lösung

Der folgende Code zeigt, wie Dateien und Parameter über eine direkte HTTP-Verbindung hochgeladen werden ohne Bibliotheken von Drittanbietern:

<code class="java">// Parameters
String url = "http://example.com/upload";
String param = "value";

// File paths
File textFile = new File("/path/to/file.txt");
File binaryFile = new File("/path/to/file.bin");

// Generate unique boundary value
String boundary = Long.toHexString(System.currentTimeMillis());

// Create connection
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

// OutputStream for writing data
try (OutputStream output = connection.getOutputStream();
     PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, charset), true)) {

    // Write parameter
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"param\"").append(CRLF);
    writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
    writer.append(CRLF).append(param).append(CRLF).flush();

    // Write text file
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\"").append(CRLF);
    writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); // Ensure file is saved using this charset
    writer.append(CRLF).flush();
    Files.copy(textFile.toPath(), output);
    output.flush(); 
    writer.append(CRLF).flush();

    // Write binary file
    writer.append("--" + boundary).append(CRLF);
    writer.append("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\"").append(CRLF);
    writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName())).append(CRLF);
    writer.append("Content-Transfer-Encoding: binary").append(CRLF);
    writer.append(CRLF).flush();
    Files.copy(binaryFile.toPath(), output);
    output.flush(); 
    writer.append(CRLF).flush();

    // End multipart/form-data
    writer.append("--" + boundary + "--").append(CRLF).flush();
}

// Get HTTP response code
int responseCode = ((HttpURLConnection) connection).getResponseCode();
System.out.println(responseCode);</code>

Zusätzliche Hinweise

  • Files.copy wird in Java 7 eingeführt; Verwenden Sie FileUtils.copyFile für ältere Versionen.
  • Apache Commons HttpComponents Client ist eine beliebte Bibliothek eines Drittanbieters, die diesen Prozess vereinfacht.
  • Apache Commons FileUpload wird serverseitig zum Verarbeiten von Datei-Uploads verwendet.

Siehe auch

  • [Verwendung von java.net.URLConnection zum Auslösen und Bearbeiten von HTTP-Anfragen] (Link zur Ressource)

Das obige ist der detaillierte Inhalt vonWie kann ich Dateien und Parameter mit reinem Java auf einen HTTP-Server hochladen, ohne auf Bibliotheken von Drittanbietern angewiesen zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn