Я пишу код для чтения файла с URL-адреса FTP, чтобы проанализировать его и сохранить данные в хранилище данных Google App Engine. Я могу заставить код работать нормально при чтении тестовых файлов, размещенных на моем собственном веб-сервере, однако, когда я пытаюсь прочитать файл данных, который мне нужен, я получаю FileNotFoundException.Чтение файла с FTP-URL в Google App Engine, FileNotFoundException
Я могу использовать один и тот же FTP-адрес в браузере для загрузки файла и могу анонимно подключаться к FTP-адресу в FileZilla, поэтому доступ не должен быть проблемой, и файл определенно существует. Это довольно большой файл, но я тоже пытался захватить файлы меньшего размера с одного и того же FTP-сервера.
Вот код, у меня есть на данный момент:
public void doGet(HttpServletRequest req,
HttpServletResponse resp) throws IOException, ServletException {
// works with a URL to my own server & a test.zip, but not this one
final URL url = new URL(
"ftp://gisftp.metc.state.mn.us/google_transit.zip");
// without the privileged action, I get an AccessControlException
ZipInputStream zin = AccessController.doPrivileged(
new PrivilegedAction<ZipInputStream>() {
public ZipInputStream run() {
return getZipStream(url);
}
}
);
ZipEntry zipentry = zin.getNextEntry();
// processing files here
zin.close();
}
// but using the privileged method, we get a FileNotFoundException
public ZipInputStream getZipStream(URL url) {
ZipInputStream zipin = null;
try {
zipin = new ZipInputStream(url.openStream());
} catch (IOException e) {
e.printStackTrace();
}
return zipin;
}
Сначала я получаю AccessControlException, но с использованием PrivilegedAction, чтобы открыть поток, кажется, исправить.
У меня нет доступа к серверу, на котором хранится файл, поэтому он ничего не может изменить.
Это имеет смысл .. .thanks для того, чтобы указать на это, не знаю, как я пропустил это, когда прочитал эту страницу. – Trent