Я планирую показать изображение, хранящееся на локальном сервере (macbook), на моем iphone для тестирования приложения. Изображение хранится в пути: /Applications/XAMPP/xamppfiles/imagestock
, Я пишу веб-сервис на PHP для отображения изображения при просмотре (например, URL), вот код сервера:
displayimage.php
<?php
$dir = '/Applications/XAMPP/xamppfiles/imagestock';
$file_display = array('jpg', 'jpeg', 'png', 'gif');
if (file_exists($dir) == false)
{
echo 'Directory "', $dir, '" not found!';
}
else
{
$dir_contents = scandir($dir);
echo "<img src='img.php?name=photo-37.jpg' height='280' width='360' />";
}
?>
img.php
<?php
$name = $_GET['name'];
$mimes = array
(
'jpg' => 'image/jpg',
'jpeg' => 'image/jpg',
'gif' => 'image/gif',
'png' => 'image/png'
);
$ext = strtolower(end(explode('.', $name)));
$file = '/Applications/XAMPP/xamppfiles/imagestock/'.$name;
header('content-type: '. $mimes[$ext]);
header('content-disposition: inline; filename="'.$name.'";');
readfile($file);
?>
Я просто тестирую и вижу изображение в моем браузере, чтобы отобразить изображение на UIImageView
Мой код здесь:
func load_image()
{
let session = URLSession(configuration: URLSessionConfiguration.default)
guard let url = URL(string: "http://192.168.1.2/MyWebService/api/displayimage.php") else { return }
var request = URLRequest(url: url)
request.httpMethod = "GET"
session.dataTask(with: request) { (data, response, error) in
if let error = error {
print("Something went wrong: \(error)")
}
if let imageData = data {
DispatchQueue.main.async {
self.imageStock.image = UIImage(data: imageData)
}
}
}.resume()
}
Там нет ошибки, но изображение не отображается. Итак, как я могу решить проблему? Я пробовал несколько способов, но не сработало. Я думаю, что ошибка с кодом сервера? Кто-то может мне помочь?
в вашей функции load_image () вы пытаетесь загрузить изображение с сервера, который предоставляет вам изображение в форме данных. Но этот подход будет пытаться загружать изображение каждый раз, когда вы вызываете функцию.
Вы должны получить только URL изображения в функции load_image ().
затем с помощью стороннего производителя Kingfisher вы должны показать изображение.
let url = URL(string: "url_of_your_image") // e.g. url_of_your_image = http://192.168.1.2/imagestock/img.png
imageView.kf.setImage(with: url)
Он загрузит изображение только один раз и автоматически сохранит его избыточность.
как импортировать зимородок в свой код, можете посмотреть Вот
Наконец-то я получил ответ. Нет необходимости делать код на стороне сервера, просто переместить папку imagestock
в папку htdocs
выглядеть так
/Applications/XAMPP/xamppfiles/htdocs/imagestock
Изменить URL выше http://192.168.1.2/MyWebService/api/displayimage.php
в http://192.168.1.2/imagestock/photo-37.jpg в коде клиента