J'ai essayé de télécharger un fichier d'un client Java vers le serveur implémenté dans l'article suivant, je vais donc décrire la procédure. J'ai essayé de télécharger un fichier depuis httpclient vers le serveur Ruby Sinatra
Cela ne peut pas être aidé par rapport à Ruby, mais le code est devenu plus long.
J'ai corrigé le code en le faisant remarquer dans la section commentaire. </ font>
Uploader.java
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
public class Uploader {
private static final String EOL = "\r\n";
public static int Send(String filename, String url, String method) throws IOException {
try (FileInputStream file = new FileInputStream(filename)) {
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
final String boundary = UUID.randomUUID().toString();
con.setDoOutput(true);
con.setRequestMethod(method);
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
try (OutputStream out = con.getOutputStream()) {
out.write(("--" + boundary + EOL +
"Content-Disposition: form-data; name=\"file\"; " +
"filename=\"" + filename + "\"" + EOL +
"Content-Type: application/octet-stream" + EOL + EOL)
.getBytes(StandardCharsets.UTF_8)
);
byte[] buffer = new byte[128];
int size = -1;
while (-1 != (size = file.read(buffer))) {
out.write(buffer, 0, size);
}
out.write((EOL + "--" + boundary + "--" + EOL).getBytes(StandardCharsets.UTF_8));
out.flush();
System.err.println(con.getResponseMessage());
return con.getResponseCode();
} finally {
con.disconnect();
}
}
}
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.err.println("Input [Upload file path] [Upload URL]");
return;
}
String filename = args[0];
String url = args[1];
int res = Uploader.Send(filename, url, "POST");
if (res == HttpURLConnection.HTTP_OK) {
System.err.println("Success!");
} else {
System.err.printf("Failed %d\n", res);
}
}
}
De plus, cette source a été créée pour que la communication qui a téléchargé le fichier avec curl soit confirmée avec Wireshark et que le contenu soit le même pour java.
$ curl -X POST http://localhost:3000/upload -F "file=@./filepath"
Recommended Posts