Ваша попытка близка к правильной.
Код, приведенный ниже, представляет собой подход «старой школы» (т. Е. Без потоков):
// don't have setters in this object.
public class MyObject
{
private final int id;
private final String name;
private int quantity;
public MyObject(final int theId, final String theName)
{
id = theId;
name = theName;
quantity = 1;
}
public void incrementQuantity()
{
quantity += 1;
}
public int getId() { ... }
public String getName() { ... }
public int getQuantity() { ... }
public boolean equals(final Object other)
{
// normal equals with 1 small caveat: only compare id and name to determine equals.
}
}
public List<MyObject> blam(final List<MyObject> refundList)
{
final List<MyObject> returnValue = new LinkedList<>();
final Map<MyObject, MyObject> thingMap = new HashMap<>();
for (final MyObject currentRefund : refundList)
{
final MyObject thing = thingMap.get(currentRefund);
if (thing != null)
{
thing.incrementQuantity();
}
else
{
thingMap.put(currentRefund, currentRefund);
}
}
returnValue.addAll(thingMap.values());
returnReturnValue;
}
Редактировать: исправлено put
Вы не можете служить странице, которая это за пределами веб-каталога, потому что путь не работает, т.е. http://mydomain.com/../page.html просто относится к недоступному местоположению.
Если Вы действительно хотите служить (статическим) файлам, которые являются вне webroot, Вы могли записать маленький Сценарий PHP, чтобы считать их и произвести их. Таким образом Вы перенаправили бы запросы к Сценарию PHP, и PHP считает соответствующий файл из диска и возвратит его назад.
Создайте символьную ссылку в веб-корне, который указывает на каталог, который Вы хотите.
cd public_html
ln -s ../images
Потребности Apache Options +FollowSymlinks
конфигурационная директива для этого для работы (можно поместить его в .htaccess
в Вашем веб-корне).
Запись Сценария PHP, который служит файлам от внешнего веб-корня, побеждает цель веб-корня. Необходимо было бы проверить пути очень тщательно, чтобы не выставлять весь диск сети.
Если Вы используете Apache в качестве сервера, можно установить его для искажения каталога в httpd.conf...
<IfModule mod_alias.c>
Alias /images/ "/User/Public_html/Image/"
<Directory "/User/Public_html/Image">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</IfModule>
IIRC, искаженная папка не должна быть в webroot.
Невозможно связаться непосредственно с файлом за пределами доступной для сети области веб-сервера.
Однако можно записать Сценарий PHP, который проксирует изображения для Вас
<img src="my_php_proxy.php">
потому что PHP может отправить данные изображения, а также HTML. Этот PHP "изображение" не ограничивается той же папкой как веб-доступный материал, это может получить доступ к любому читаемому файлу на сервере. См. http://www.electrictoolbox.com/image-headers-php/ для большего количества информации
Не возможно непосредственно получить доступ к файлам за пределами webroot; это - встроенное ограничение безопасности, которое является там на серьезном основании.
Однако возможно использовать Сценарий PHP для обслуживания этих изображений для Вас. Таким образом, можно назвать изображение как:
/image.php?file=myfile.jpg
и используйте file_get_contents (), чтобы получить содержание файла и распечатать их к Вашему браузеру. Необходимо также отправить заголовки клиенту в этом случае с помощью заголовка PHP () функция. Короткий пример:
<?php
$file = basename(urldecode($_GET['file']));
$fileDir = '/path/to/files/';
if (file_exists($fileDir . $file))
{
// Note: You should probably do some more checks
// on the filetype, size, etc.
$contents = file_get_contents($fileDir . $file);
// Note: You should probably implement some kind
// of check on filetype
header('Content-type: image/jpeg');
echo $contents;
}
?>
Используя сценарий к этому имеет еще некоторые преимущества:
Можно или сделать ссылку на каталог образов в общественности ___ HTML, переместить каталог образов в public_html или, если у Вас есть особая симпатия к замысловатым решениям, можно записать сценарий, который читает файл изображения и производит его пользователю (Конечно, если Вы не делаете белый список всех изображений, у Вас могла бы быть возможная проблема защиты в Ваших руках).