Ваша интуиция о необходимости вернуть имя файла с сервера верна. Существует простой пример в FAQ Dropzone FAQ , который показывает основную идею c.
1) Ваш сервер должен ответить на POST загрузки с подробной информацией о том, куда он поместил файл - например, URL, имя файла, путь и т. д. c. Таким образом, в вашем случае, в конце вашего PHP кода, вам нужно сделать что-то вроде:
// ... rest of your PHP ...
move_uploaded_file($tempFile,"images/$newname");
// Let the browser/JS know we are sending a JSON response back. Make sure there
// is no output before this.
header('Content-type: application/json');
echo json_encode([
'status' => 'OK', // Not required, but maybe useful
'image' => "images/$newname",
]);
2) В вашем JS вам нужно принять этот ответ от сервера и сделай что-нибудь с этим. Документы Dropzone показывают для события success
:
Файл успешно загружен. Получает ответ сервера в качестве второго аргумента.
Звучит так, как нам нужно. Поэтому замените ваш обработчик complete
на один для success
и добавьте второй аргумент:
this.on("success", function (file, response) {
console.dir(response);
// response.image will be the relative path to your uploaded image.
// You could also use response.status to check everything went OK,
// maybe show an error msg from the server if not.
});
Элемент часто задаваемых вопросов Dropzone, на который я ссылался выше, показывает использование метода .emit()
для отображения изображения. Я не знаком с этим, и это, кажется, не описано в документации. Попробуйте, может быть, это работает и соответствует вашим потребностям. Если нет, вы можете сделать что-то вроде:
// Maybe you have an <img class='thumbnail'> in your HTML, ready to show the upload
$('.thumbnail').attr('src', response.image).fadeIn();