Как разрешить доступ к внешнему хранилищу. Сохранение файлов. Сохранение файлов во внутреннем хранилище
Последнее обновление: 21.03.2017
В прошлой теме мы рассмотрели сохранение и чтение файлов из каталога приложения. По умолчанию такие файлы доступны только самому приложения. Однако мы можем помещать и работать с файлами из внешнего хранилища. Это также позволит другим программам открывать данные файлы и при необходимости изменять.
Весь механизм работы с файлами будет таким же, как и при работе с хранилищем приложения. Ключевым отличием здесь будет получение и использование пути к внешнему хранилищу через метод Environment.getExternalStorageDirectory()
Итак, пусть в файле activity_main.xml будет такая же разметка интерфейса:
А код класса MainActivity будет выглядеть следующим образом:
Package com.example.eugene.filesapp; import android.Manifest; import android.content.pm.PackageManager; import android.os.Environment; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity { private final static String FILE_NAME = "content.txt"; private static final int REQUEST_PERMISSION_WRITE = 1001; private boolean permissionGranted; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } private File getExternalPath() { return(new File(Environment.getExternalStorageDirectory(), FILE_NAME)); } // сохранение файла public void saveText(View view){ if(!permissionGranted){ checkPermissions(); return; } FileOutputStream fos = null; try { EditText textBox = (EditText) findViewById(R.id.save_text); String text = textBox.getText().toString(); fos = new FileOutputStream(getExternalPath()); fos.write(text.getBytes()); Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show(); } catch(IOException ex) { Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } finally{ try{ if(fos!=null) fos.close(); } catch(IOException ex){ Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } } } // открытие файла public void openText(View view){ if(!permissionGranted){ checkPermissions(); return; } FileInputStream fin = null; TextView textView = (TextView) findViewById(R.id.open_text); File file = getExternalPath(); // если файл не существует, выход из метода if(!file.exists()) return; try { fin = new FileInputStream(file); byte bytes = new byte; fin.read(bytes); String text = new String (bytes); textView.setText(text); } catch(IOException ex) { Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } finally{ try{ if(fin!=null) fin.close(); } catch(IOException ex){ Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); } } } // проверяем, доступно ли внешнее хранилище для чтения и записи public boolean isExternalStorageWriteable(){ String state = Environment.getExternalStorageState(); return Environment.MEDIA_MOUNTED.equals(state); } // проверяем, доступно ли внешнее хранилище хотя бы только для чтения public boolean isExternalStorageReadable(){ String state = Environment.getExternalStorageState(); return (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)); } private boolean checkPermissions(){ if(!isExternalStorageReadable() || !isExternalStorageWriteable()){ Toast.makeText(this, "Внешнее хранилище не доступно", Toast.LENGTH_LONG).show(); return false; } int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if(permissionCheck!= PackageManager.PERMISSION_GRANTED){ ActivityCompat.requestPermissions(this, new String{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_WRITE); return false; } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions, @NonNull int grantResults){ switch (requestCode){ case REQUEST_PERMISSION_WRITE: if(grantResults.length > 0 && grantResults == PackageManager.PERMISSION_GRANTED){ permissionGranted = true; Toast.makeText(this, "Разрешения получены", Toast.LENGTH_LONG).show(); } else{ Toast.makeText(this, "Необходимо дать разрешения", Toast.LENGTH_LONG).show(); } break; } } }
С помощью выражения Environment.getExternalStorageDirectory() получаем доступ к папке приложения во внешнем хранилище и устанавливаем объект файла:
Private File getExternalPath() { return(new File(Environment.getExternalStorageDirectory(), FILE_NAME)); }
Поскольку для чтения/записи во внешнее хранилище необходимы разрешения, то перед операциями сохранения и записи файла необходимо проверить наличие разрешений. Для этого определен метод checkPermissions() . При установке разрешений срабатывает метод onRequestPermissionsResult() , в котором в случае удачной установки разрешений для переменной permissionGranted задается значение true .
Чтобы использовать внешнее хранилище, также надо установить разрешения в файле манифеста AndroidManifest.xml:
Мое приложение хранит файлы во внутреннем каталоге хранилища (/Android/data/com.mycompany.myapp/files, как было возвращено getFilesDir()), и я хотел бы разрешить пользователям обращаться к этим файлам непосредственно из управления файлами приложение на своем мобильном устройстве или приложение Android File Transfer для рабочего стола.
2 ответов
Я более подробно рассмотрел результат getFilesDir() vs getExternalFilesDir() и обнаружил, что getFilesDir() возвращает /data/data//files , а getExternalFilesDir() возвращает /Android/data//files . Я думал, что файлы приложений, которые я просматривал в /Android/data , были внутренними каталогами хранилища, но теперь я вижу, что это фактически внешние каталоги хранения.
Если внутренние папки хранения никогда не доступны для обычных пользователей, я хочу, чтобы в документации говорилось, что вместо того, чтобы говорить, что они недоступны "по умолчанию". По крайней мере, для меня, говоря "по умолчанию", подразумевается, что поведение по умолчанию может быть изменено.
В любом случае, я протестировал и подтвердил, что если я удалю свое приложение, файлы, сохраненные в getExternalFilesDir() , будут удалены автоматически. Таким образом, это соответствует моей потребности в местоположении хранилища, которое явно связано с приложением (использует имя конкретного приложения и удаляется с помощью приложения), но доступно пользователям для случайного ручного управления файлами.
Вот сравнение, которое может быть полезно для кого-то другого, читающего это:
Я думаю, что вы запутались в документации разработчиков, я не могу вас обвинить, это не лучшая документация, которую я когда-либо читал. В любом случае, Android предоставляет два способа сохранения файлов в файловой системе:
- Использование внутреннего хранилища
- Использование внешнего хранилища
Внутреннее хранилище ВСЕГДА доступно и доступно ТОЛЬКО вашему приложению, никакое другое приложение в системе не может получить доступ к файлам, сохраненным в этом разделе.
Теперь я думаю, что вам нужно Внешнее хранилище , потому что оно "доступно для чтения" и доступно любому пользователю и любым приложениям. Недостатком является то, что он может быть недоступен, так как пользователь может установить его на USB-устройство, которое может быть удалено пользователем в любое время.
Вы не должны использовать ни MODE_WORLD_WRITEABLE , ни MODE_WORLD_READABLE , как указано в документации, потому что это очень опасно. Кроме того, эти константы устарели, поскольку уровень API 17
Если вам нужно сделать ваши файлы общедоступными, сохраните их в Внешнем хранилище . Вам нужно будет объявить разрешение в вашем файле манифеста, чтобы избежать сбоя приложения при каждом доступе к Внешнему хранилищу ...
поскольку Внешнее хранилище может быть недоступно, вам нужно будет определить его состояние перед выполнением какой-либо операции, иначе ваше приложение выйдет из строя...
Public enum StorageState{ NOT_AVAILABLE, WRITEABLE, READ_ONLY } public StorageState getExternalStorageState() { StorageState result = StorageState.NOT_AVAILABLE; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return StorageState.WRITEABLE; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return StorageState.READ_ONLY; } return result; }
Более подробная информация о документации и вещах, о которых вы должны знать. Например, вы можете предоставить владельцам своих файлов эти файлы, чтобы при удалении приложения система могла автоматически удалять эти файлы. Для получения дополнительной информации см. Документацию на сайте разработчиков Android
поделитьсяХотя ресурсы прекрасно подходят для хранения изображений и звуков нашего приложения, иногда необходимо сохранять информацию и позже загружать ее вновь. Простой пример – работа с таблицей лучших результатов.
Android предлагает различные способы для реализации этого; вы можете использовать общие настройки приложения, маленькую базу данных SQLite и т. д. У всех этих возможностей есть общая черта – они не обрабатывают большие двоичные файлы. Для чего нам это может понадобиться? Хотя мы можем указать системе, чтобы она устанавливала приложение во внешнее хранилище (и таким образом не тратить память внутреннего хранилища), это будет работать только в версиях Android начиная с 2.2. В более старых версиях ОС все данные приложения будут храниться во внутренней памяти устройства. Теоретически мы могли бы включить код нашего приложения в АРК-файл и загружать все ресурсы с сервера на карту памяти SD при первом запуске программы. Многие известные игры для Android так и делают.
Существуют и другие сценарии, в которых нам необходим доступ к карте памяти (которая, в общем-то, является синонимом термина внешнее хранилище для современных устройств). Мы могли бы позволить нашим пользователям создавать собственные уровни во внутреннем редакторе. После создания нам будет необходимо их где-то хранить, и SD-карта прекрасно для этого подходит. Итак, мы не будем использовать необычные механизмы, предлагаемые Android для хранения настроек приложения, и рассмотрим вместо этого механизм реализации чтения и записи файлов на карте SD.
Первое, что нам необходимо сделать, – запросить разрешение на доступ к внешнему хранилищу. Это делается в файле манифеста с помощью уже рассмотренного нами элемента
Далее нужно проверить, доступно ли нам в данный момент внешнее хранилище. Например, при работе с AVD у вас есть возможность обойтись без эмулирования наличия карты памяти – тогда приложение ничего не сможет туда записывать. Другая причина не получать доступ к SD-карте – его занятость другим процессом (например, просмотра его пользователем через USB). Вот так мы проверяем состояние карты памяти;
В результате мы получаем строку. Класс Environment определяет набор констант, одна из которых называется Environment. MEDI AMOUNTED (ее значение – тоже строка). Если вышеуказанный метод возвращает именно эту константу, это значит, что мы имеем полный доступ (чтение и запись) к внешнему хранилищу. Обратите внимание – на самом деле вам необходимо использовать метод equals для сравнения двух строк; оператор равенства в таких случаях не всегда дает верные результаты.
Итак, мы узнали, что обладаем полным доступом к внешнему хранилищу, и теперь нам необходимо получить название его корневой директории. Если нам нужен доступ к определенному файлу, путь к нему необходимо определять относительно корневого каталога. Для этого мы применим другой статический метод класса Environment:
С этого момента мы можем использовать стандартные Java-классы для чтения и записи файлов. Создадим небольшой пример, реализующий запись файла на карту памяти, его чтение, демонстрацию его содержимого в TextView и удаление его с карты. В листинге 4.8 показан исходный код для этого.
Листинг 4.8. Активность ExternalStorageTest package com.bad.ogi с.androi dgames;
Сначала мы проверяем физическую доступность SD-карты (если проверка не удалась, на этом все и заканчивается). Далее получаем корневой каталог хранилища и создаем новый экземпляр объекта File, указывающий на файл, который мы создадим в следующем выражении. Метод writeTextFi 1е использует стандартные Java-классы ввода-вывода для реализации наших целей. Если файл еще не существует, метод создаст его; в ином случае он перепишет существующий. После успешной записи текста в файл на карте мы вновь его считываем оттуда и устанавливаем в качестве содержимого TextVi ew. Финальный шаг – удаление файла из внешнего хранилища. Все действия совершаются с соблюдением необходимых мер предосторожности, благодаря которым сообщения о проблемах также выводятся в TextView. Рисунок 4.11 демонстрирует вывод активности.
Из этого урока необходимо извлечь следующие моменты.
Не работайте с файлами, которые вам не принадлежат. Пользователи очень рассердятся, если вы удалите фотографии с их последней вечеринки.
Всегда проверяйте доступность внешнего хранилища.
Не связывайтесь со служебными файлами во внешнем хранилище. Я серьезно.
Рис. 4.11. Послание от веселого Роджера
Увидев, как легко удалить все файлы из внешнего хранилища, вы должны подумать дважды, создавая и размещая на Android Market приложение, запрашивающее доступ к карте SD, – ведь после инсталляции оно будет иметь полный доступ ко всем файлам.
Обработка звука
Android предлагает простые в применении API для воспроизведения звуковых эффектов и музыкальных файлов – как раз то, что нам нужно для написания игры. Рассмотрим их.
С ростом мегапикселей фото- и видеокамер проблема хранения домашнего медиаконтента все чаще возникает у большого числа пользователей ПК. Конечно, жесткие диски стоят сегодня не так уж и дорого, а их объем исчисляется терабайтами, но и этого бывает мало.
Вариантов расширения емкости доступного дискового пространства существует несколько. Если у вас обычный «большой» компьютер, то самый простой из них - установка в него новых винчестеров. Более универсальный способ - использование внешних дисков. Однако наиболее удобным (и дорогим) будет установка в домашней локальной сети сетевого накопителя.
Он позволит вам иметь постоянный доступ с любого ПК или плеера ко всей медиабиблиотеке, хранить резервные копии документов и системных разделов компьютеров, обмениваться файлами через интернет без участия ПК и многое другое. Кроме того, эти устройства отличает небольшой (по сравнению с ПК) размер и низкий уровень энергопотребления и шума. Так что если у вас не коттедж с парой подсобных помещений, то компактный сетевой накопитель может быть очень удачным выбором. Кстати, есть даже модели для 2,5-дюймовых винчестеров.
Поскольку наша сеть уже включает роутер , то достаточно только подобрать нужную модель NAS и подключить ее к сети. Для начинающих пользователей, которые не уверены в необходимости десятков терабайт, лучше всего посмотреть на устройства с установкой одного или двух винчестеров. Они сегодня наиболее оптимальны для домашнего использования. А если не будет хватать места - к ним можно будет подключить внешние USB- или eSATA-диски. Если же вы уже заранее понимаете, что пары дисков точно не хватит - есть модели на 4, 5, 6 и более дисков. Правда, их стоимость относительно велика. Большинство устройств продаются без винчестеров, так что их надо будет приобретать отдельно. Для справки лучше всего ориентироваться на списки совместимости производителей. Гнаться за самыми быстрыми винчестерами в данном случае нет смысла. Лучше подбирать их по низкому уровню энергопотребления, нагрева и шума.
Стоит также упомянуть о возможности использования в качестве NAS отдельного выделенного обычного ПК. Но в этом материале речь будет идти именно о готовых сетевых накопителях.
К сети практически все устройства подключаются по гигабитному соединению, поскольку 10-12 МБ/с, которые обеспечивает FastEthernet, по плечу уже самым простым моделям и сегодня смотрятся совсем несерьезно.
В качестве встроенной операционной системы обычно используется Linux, но встречаются варианты и с Windows Home Server. Во втором случае сервер практически не отличается от домашнего ПК, только общение с ним происходит исключительно по сети. WHS снабжена качественной документацией и многочисленными «помощниками», так что разобраться будет несложно. Большинство информации далее в этой статье к этому варианту не относится.
Если вас пугает общение с Linux, то на самом деле ничего сложного в данном случае нет - пользователю доступен удобный web-интерфейс, через который можно настроить все нужные параметры и функции. Но если добраться до командной строки - то можно будет работать с устройством практически как с обычным компьютером.
Кроме операционной системы, есть также смысл обратить внимание на возможности устройства. В настоящее время кроме обычного хранения файлов сетевые накопители предоставляют сервисы медиасервера, загрузки файлов, удаленного доступа и другие.
Что касается аппаратной платформы и производительности, то модели на x86-совместимых процессорах относятся к наиболее производительному (и дорогому) сегменту, в центре выступают ARM-процессоры с частотой 1000-1600 МГц, а замыкают линейку обычно младшие ARM. В реальности стоит смотреть не на саму платформу, а результаты ее конкретной реализации, поскольку оптимизацией программной оболочки можно многого достичь.
От объема оперативной памяти зависит эффективность работы дополнительных сервисов, так что мы бы рекомендовали выбирать устройства с 256 МБ или выше, если планируется использовать не только сетевой доступ к файлам. Хотя и для первого ознакомления вполне достаточно и 64 или 128 МБ. Только не ждите от них слишком многого.
В этот раз мы используем модель DS210+ одного из наиболее популярных производителей данного сегмента рынка - компании Synologу. Это двухдисковое устройство, кроме реализации сервисов сетевого хранения файлов, имеет и множество дополнительных функций и может быть очень полезным как для домашнего использования, так и в офисах.
Нужно отметить, что обычно у всех производителей возможности прошивок практически одинаковы для всех моделей линейки и обновляются одновременно. Более полно познакомиться с устройствами Synology можно в недавнем обзоре DS710+ .
Сборка
Чаще всего сетевые накопители продаются без винчестеров и пользователю нужно их приобрести и установить самостоятельно. Ничего сложного здесь нет - открываете корпус или вытаскиваете рамки, прикручиваете диски на место и собираете конструкцию.
Единственное замечание здесь - желательно предварительно убедиться, что на винчестерах нет никакой информации и таблица разделов пуста. Иначе могут быть ошибки при инсталляции прошивки. Также не забываем, что все модели сетевых накопителей для своих внутренних дисков в обязательном порядке требуют переформатирования и просто установить существующие диски с сохранением данных не получится.
Установка прошивки
После этого обычно необходимо пройти этап установки встроенного программного обеспечения в NAS. Делается это с использованием комплектной утилиты, в нашем случае Synology Assistant. И прошивку, и программу лучше всего скачать с сайта производителя. Так вы будете уверены, что используются самые последние версии. Но можно и просто вставить в привод ПК комплектный оптический диск - вся нужная информация записана и на нем. Если накопитель поставлялся с винчестерами, то прошивка в нем уже стоит и этот этап можно пропустить.
Сетевые настройки
В большинстве случаев никаких специальных сетевых настроек на накопителе делать не требуется. Адреса он получает от роутера по DHCP, имя часто подходит предложенное производителем. Но при необходимости (например, если вам хочется указать новое имя или запретить доступ накопителя в интернет, удалив из параметров адрес маршрутизатора по умолчанию), можно воспользоваться страничкой «Панель управления - Сеть». Кроме того, здесь можно включить поддержку Jumbo Frames.
Выбор конфигурации дисков
После установки прошивки необходимо выбрать конфигурацию жестких дисков (в некоторых случаях она создается одновременно с установкой прошивки). Если их более одного, то можно выбрать один из вариантов RAID-массивов. Краткие сравнительные характеристики основных из них указаны в таблице. В формуле объема N - число дисков, S - объем одного из них (подразумевается, что диски одинаковые, в большинстве случаев это необходимо для оптимальной работы).
Режим | Число дисков | Общий объем | Плюсы | Минусы |
Отдельные диски (Basic) | 1 | S | Максимальная независимость | Нет отказоустойчивости, нет возможности объединения дисков |
JBOD | 2 и более | S×N | Единый массив максимального объема | |
RAID0 | 2 и более | S×N | Максимальная скорость | При отказе одного диска теряется вся информация |
RAID1 | 2 | S | Малый полезный объем | |
RAID5 | 3 и более | S×(N−1) | Отказоустойчивость к потере одного диска | Требуется 3 диска и более, невысокая скорость записи на слабых системах |
Некоторые производители, в частности рассматриваемый здесь Synology, предоставляют собственные реализации RAID с упрощенной конфигурацией - когда для расширения массива достаточно только добавить диски или поменять его на более емкий.
Большинство моделей позволяют создавать сразу несколько массивов, а ограничением служит только число дисков. Например, если их четыре, то можно сделать из двух зеркало RAID1, а вторую пару собрать в RAID0.
Обратите внимание, что собственно прошивка устанавливается на каждый из дисков, это позволяет повысить отказоустойчивость и реализовать возможность по миграции и расширению массивов без потери данных методом последовательной замены дисков в RAID1/RAID5.
Кроме системного раздела, обычно есть и раздел подкачки, так что общий полезный пользователю объем получается несколько меньше. Но потеря 2-4 ГБ на дисках в 1 ТБ - не очень существенна.
Для форматирования винчестеров нужно сначала попасть в web-интерфейс устройства. Это можно сделать из Synology Assistant или просто открыв в браузере адрес/имя накопителя. После ввода имени и пароля вы получите доступ к настройкам.
Далее переходим к настройке дисковых томов. Если у вас один винчестер, то вариант тут тоже только один - «Basic», точнее есть еще «Synology Hybrid Raid», который автоматически выбирает наиболее удобную конфигурацию дисков и позволяет легко добавлять новые диски без потери информации. Для рассматриваемой двухдисковой модели он несколько избыточен. Так что если ставите два диска, то лучше выбрать классические JBOD - объединение двух дисков в один большой том, RAID0 - массив с чередованием для объединения в один том и увеличения производительности или RAID1 - два диска являются зеркальными копиями друг друга, обеспечивая отказоустойчивость к неисправности одного из них, правда полезный объем в этом случае равен одному диску. Иногда лучше даже просто сделать два независимых «Basic» тома, а для важных данных настроить автоматическое резервирование с одного диска на второй.
В последних версиях прошивок Synology появилась возможность деления каждого диска на несколько частей и организация массивов уже из них. Это существенно повышает гибкость конфигурации. Поскольку у других производителей такой возможности (пока?) нет, то сделаем все по старинке - один диск в один том.
На последнем шаге устройство предложит полностью просканировать массив на плохие блоки после создания. Несмотря на то, что современные винчестеры отличаются исключительной надежностью, лучше от этого не отказываться.
Создание общих ресурсов и определение прав
Следующим этапом после создания дискового тома будет программирование пользователей системы. Конечно, можно попробовать работать исключительно под аккаунтом администратора, но это не очень удобно. Второй крайностью будет разрешение гостевого доступа, так что никакой проверки проводиться не будет совсем. Но мы бы все-таки рекомендовали даже для дома и простой сети использовать «полную версию» - с именами и контролем доступа.
Самым удобным вариантом будет использование логинов и паролей, полностью совпадающих с учетными записями в Windows. Это исключит лишние запросы при обращении к сетевым ресурсам. Также будет полезным создать пользователей например для медиаплееров, так что им можно было выделить права «только чтение» на некоторые ресурсы чтобы избежать рисков потери данных. И не забудьте поменять пароль администратора сетевого накопителя.
Если пользователей много, можно также использовать организацию групп для более простого управления правами. Для дома это обычно избыточно.
Права пользователям выдаются не целиком на созданный дисковый том, а на общие папки, расположенные на нем. Так что и их тоже надо запрограммировать. В некоторых случаях они автоматически появляются после создания тома или включения некоторых сервисов (например медиаплеера).
В нашем случае мы сделаем папку public и назначим для нее права нашим пользователям.
Доступ к накопителю с ПК
После описанных выше операций, основной сценарий сетевого накопителя - чтение и запись файлов по сети - уже можно начинать использовать.
Вспомним немного практических особенностей сетей Windows. Основной современный сетевой протокол - TCP/IP - позволяет участникам только обмениваться пакетами. Так, для реализации различных сервисов поверх него нужно использовать протоколы более высокого уровня. Не вдаваясь в подробности - «Сеть»/«Сетевое окружение» в Windows, CIFS, SMB, SAMBA - все это означает возможность обмена файлами между сетевыми устройствами и сетевую печать. Реализация этого протокола возможна не только на Windows ПК, но и, например, медиаплеерах, телевизорах, спутниковых ресиверах, IP-видеокамерах и, конечно, других ОС, например Linux или Mac OS (аналогичный «стандартный/общий» протокол для этой ОС называется AFP). В большинстве случаев эти протоколы работают только в локальном сегменте вашей домашней сети.
Для доступа к ресурсу нужно знать имя сервера и имя общей папки на нем. В «Проводнике» Windows достаточно написать в строке адреса «\ServerFolder» - и вы попадаете в папку Folder, расположенную на сервере Server. В нашем случае нужно писать «\DiskStationpublic». Если ваше имя и пароль пользователя в Windows записаны в NAS и права на эту папку у вас есть (или включен гостевой доступ) - то вы увидите ее содержимое, если же нет - то сервер запросит имя и пароль. Обратите внимание, что в сети Windows на разные ресурсы одного сервера в один момент времени можно обращаться только с одним именем и паролем.
Часто удобно иметь постоянно подключенные локальные «буквы» для доступа к сетевым ресурсам. Это тоже сделать несложно - открываете в проводнике «\DiskStation», на иконке «public» нажимаете левую кнопку мышки и выбираете «Подключить». При наличии галочки в окне «Восстанавливать при входе в систему» - у вас всегда на выбранной букве будет доступ к этой общей папке (в случае, если накопитель, разумеется, включен). Кстати, для этой операции можно использовать и Synology Assistant.
Дополнительные настройки NAS
Коротко опишем, какие еще действия стоит предпринять после первого запуска сетевого накопителя.
Может так оказаться, что в вашей домашней сети используется имя рабочей группы, отличное от классического «WORKGROUP». Тогда желательно и у сетевого накопителя его изменить. Делается это в настройках протокола Windows - «Панель управления - Win/Mac/NFS». Если сетевой накопитель - единственное постоянно работающее устройство, то можно активировать на нем функцию «Local Master Browser», которая повысит стабильность работы сетевого окружения Windows. По имени или IP-адресу устройства можно найти всегда, но вот собственно их список в окне «Сеть» может иногда быть неполным.
Если планируется предоставлять доступ к NAS из сети Интернет, то желательно включить автоматическую блокировку при попытке подбора пароля. Это позволит вам не опасаться атак начинающих хакеров.
Также обязательно нужно включить доступ к web-интерфейсу по шифрованному протоколу HTTPS, причем желательно даже указать обязательность его использования. Делается это на вкладке «Панель управления - Настройки DSM».
Обратите внимание, что большинство современных браузеров при работе с HTTPS скорее всего будет «ругаться» на сетевой накопитель. Дело в том, что сертификат SSL, который он использует, является «самоподписанным», то есть проверить его происхождение через мировые центры сертификации невозможно. Обычно в этом случае браузер предложит вам включить данный сервер в список «доверенных» самостоятельно. Для работы в коммерческом сегменте вы можете инсталлировать в сетевой накопитель сертификат, официально полученный от доверенного центра.
Как и роутер, сетевой накопитель умеет отправлять сообщения по электронной почте в случае возникновения проблем. Использовать эту опцию можно со многими общедоступными почтовыми сервисами, которые поддерживают SMTP.
У большинства устройств есть опции по управлению питанием - например, отключению винчестеров в случае отсутствия активности или даже программирование расписания работы. Споры о том, какой режим работы - постоянный или с отключениями - более «полезен» для винчестера, не утихают до сих пор. Однозначного совета тут дать нельзя. Мы бы рекомендовали смотреть по ситуации - если накопитель используется более чем пару раз в сутки, лучше оставить диски включенными. В реальности современные диски очень надежные и если их не ронять во включенном состоянии, служат очень долго и по времени, и по циклам включения/выключения.
Кстати, для повышения надежности очень советуем подключать сетевой накопитель (да и другое оборудование тоже) через источник бесперебойного питания. Выбрать его модель можно по спискам совместимости NAS, тогда при соединении устройств по USB, ИБП сможет сообщить накопителю о проблемах и при необходимости безопасно выключить его.
Доступ к файлам из интернета
В качестве упражнения по совместному использованию роутера и NAS опишем один из вариантов организации полного и безопасного доступа к вашим файлам из сети Интернет.
У Synology есть для этого очень удобная возможность - встроенный файловый менеджер FileStation. Для него необходимо включить протокол HTTPS. Порт можно оставить по умолчанию 7001, но в случае, когда роутер не умеет работать с разными внешними и внутренними портами, лучше все-таки поменять на что-то менее «обычное».
Контроль прав пользователей у Synology касается и дополнительных сервисов, так что надо убедиться, что FileStation разрешен для нужных людей.
Следующие два действия проводится уже на роутере. Сначала мы назначаем на странице свойств сервера DHCP жесткую привязку MAC-адреса сетевого накопителя одному из IP-адресов диапазона локальной сети. Это позволит нам быть уверенными в том, что IP-адрес после перезагрузок не изменится.
Ну и последний штрих - назначение трансляции внешнего порта на FileStation. В нашем примере мы выбрали внешний порт 39456 и перевели его на внутренний 7001 на адрес 192.168.1.40 сетевого накопителя.
На этом настройка закончена. Теперь из любой точки интернета вы можете обратиться к своим файлам через браузер, набрав в строке адреса ссылку «https://myhost.homedns.org:39456» (адрес взят в качестве примера из прошлой статьи) и указав имя и пароль пользователя
В следующем материале мы рассмотрим работу с дополнительными сервисами сетевого накопителя.
Облачные сервисы хранения данных стали настоящей панацеей для всех, кто хотел получать доступ к своим данным с любого устройства из любой точки пространства. Мы с радостью переместили свои данные в облака и успешно пользуемся ими, лишь иногда с опаской читая очередную новость о хаках iCloud и Dropbox. Кому-то изначально не даёт покоя тот факт, что облако контролирует «кто-то», но не сам пользователь. Именно такие энтузиасты сделали OwnCloud.
Что это такое
«Собственное облако» представляет собой не что иное, как персональное хранилище, работающее на собственном веб-сервере или сайте. Главная фишка OwnCloud в том, что он бесплатный и опенсорсный. В целом при наличии вышеупомянутой площадки для размещения пользователю потребуется примерно 5 минут на разворачивание собственного Dropbox-like хранилища, и без хитроумного кодинга - каких-либо специфических знаний не нужно. В довесок пользователь получает доступ к приложениям (текстовые редакторы, списки задач и прочие полезные штуки), которые создают другие участники проекта для собственных нужд.