Il y a 3-4 ans j’ai eu à faire ça en Java (sous PC), et mon code ressemblait à ça : https://gist.github.com/anonymous/4153047 (je n’arrive plus à trouver l’article correspondant qui explique ce code).
Mais voici mes explications :
Lorsque tu envoies une image à un serveur PHP, tu utilises la method POST. Et le contenu du formulaire va être envoyé en plusieurs fois.
Ligne 20 : Tu demandes au serveur d’ouvrir une connexion, en lui donnant une clé unique (boundary) pour qu’il reconnaisse les requêtes suivantes (celle qui envoie le fichier en plusieurs parties).
Ligne 29-42 : Tu configures l’header des requêtes qui vont envoyer les parties du fichier.
Ligne 45-50 : Grâce à la boucle tu envoies les parties de fichier.
Ligne 52-56 : Tu as la réponse du serveur (souvent du HTML, ou du JSON (si c’est de l’ajax)).
De mon côté j’avais personnalisé la fonction comme ça :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 | package net.minecraft.src; // J'ai appris le java, juste pour ça. :P
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//...
public class GuiScreenShots extends GuiScreen
{
//...
private void SendPicture() {
try {
String charset = "utf-8", CRLF = "\r\n";
File binaryFile = new File(screenShotDir, (String) ((List) GuiScreenShots.availableScreenShots().get(IndexSelection)).get(0)+".png");
String boundary = Long.toHexString(System.currentTimeMillis());
URLConnection connection;
connection = new URL("http://www.hostingpics.net/codes_iframe.php").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
PrintWriter writer = null;
try {
OutputStream output = connection.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(output, charset), true);
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"id_m\"").append(CRLF);
writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF);
writer.append(CRLF);
writer.append("828").append(CRLF).flush();
writer.append("--" + boundary).append(CRLF);
writer.append("Content-Disposition: form-data; name=\"photo1\"; 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();
InputStream input = null;
try {
input = new FileInputStream(binaryFile);
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
output.flush();
} finally {
if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
}
writer.append(CRLF).flush();
writer.append("--" + boundary + "--").append(CRLF);
} finally {
if (writer != null) writer.close();
BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String read = bufferedreader.readLine(), url_num = null, url_id = null;
Pattern pattern_name = Pattern.compile("http://img(.*).hostingpics.net/thumbs/mini_(.*).png");
Matcher matcher = null;
do {
matcher = pattern_name.matcher(read);
read = bufferedreader.readLine();
if (matcher.find()) {
System.out.println("Upload du screen.");
url_num = matcher.group(1);
url_id = matcher.group(2);
Sys.openURL("http://img"+url_num+".hostingpics.net/pics/"+url_id+".png");
File file = new File(screenShotDir, (String) ((List) GuiScreenShots.availableScreenShots().get(IndexSelection)).get(0)+".txt");
file.createNewFile();
BufferedWriter output = new BufferedWriter(new FileWriter(file, true));
output.write("http://img"+url_num+".hostingpics.net/pics/"+url_id+".png");
output.flush();
output.close();
}
} while (read != null && url_id == null);
bufferedreader.close();
}
} catch (IOException ioexception) {
ioexception.printStackTrace();
}
}
}
|
Peut-être que le code diffère mais le principe reste le même.