Загрузка PNG на сервер с Java с использованием данных POST
Привет, у меня возникли некоторые проблемы при попытке передать изображение png на мой веб-сервер с использованием java и php. Я пытался использовать FTP, но программное обеспечение, которое я пишу для блоков 21, делает его бесполезным.
Мне было предложено использовать данные в форме urlencoded, а затем использовать POST-запрос, чтобы полностью потерять их по этой теме, и я мог просто использовать какое-то направление, по-видимому, сайты размещения файлов и изображений используют один и тот же метод для передачи файлов и изображений с компьютера пользователя на их серверы.,
может быть, просто объяснение того, что происходит, может помочь мне понять, что именно я пытаюсь сделать с Java и PHP
Любая помощь приветствуется!
1 ответ
Я тоже недавно столкнулся с такой же проблемой. После некоторых исследований я обнаружил, что библиотека HttpComponents от Apache ( http://hc.apache.org/) содержит почти все, что вам нужно для создания запроса HTTP-POST довольно простым способом.
Вот метод, который отправит запрос POST с файлом на определенный URL:
public static void upload(URL url, File file) throws IOException, URISyntaxException {
HttpClient client = new DefaultHttpClient(); //The client object which will do the upload
HttpPost httpPost = new HttpPost(url.toURI()); //The POST request to send
FileBody fileB = new FileBody(file);
MultipartEntity request = new MultipartEntity(); //The HTTP entity which will holds the different body parts, here the file
request.addPart("file", fileB);
httpPost.setEntity(request);
HttpResponse response = client.execute(httpPost); //Once the upload is complete (successful or not), the client will return a response given by the server
if(response.getStatusLine().getStatusCode()==200) { //If the code contained in this response equals 200, then the upload is successful (and ready to be processed by the php code)
System.out.println("Upload successful !");
}
}
Чтобы завершить загрузку, у вас должен быть php-код, который обрабатывает этот запрос POST, вот он:
<?php
$directory = 'Set here the directory you want the file to be uploaded to';
$filename = basename($_FILES['file']['name']);
if(strrchr($_FILES['file']['name'], '.')=='.png') {//Check if the actual file extension is PNG, otherwise this could lead to a big security breach
if(move_uploaded_file($_FILES['file']['tmp_name'], $directory. $filename)) { //The file is transfered from its temp directory to the directory we want, and the function returns TRUE if successfull
//Do what you want, SQL insert, logs, etc
}
}
?>
Объект URL, передаваемый методу Java, должен указывать на код php, например http://mysite.com/upload.php и его можно очень просто построить из строки. Файл также может быть собран из строки, представляющей его путь.
Я не потратил время, чтобы протестировать его должным образом, но он был основан на правильном рабочем решении, поэтому я надеюсь, что это поможет вам.