Как зарегистрировать обработчик потока URL для протокола gs: в Java Spring - PullRequest
0 голосов
/ 21 октября 2019

У меня есть код, который должен обрабатывать «нормальные» URL-адреса, такие как «file: /// ...», а также файлы «gs: // ...».

У меня есть приложениеФайл .yaml, который имеет

bannedKeywordsFile: gs://myproject.appspot.com/mybucket/myfile.csv

Сбой при исключении MalformedURLException.

@Value("${bannedKeywordsFile}")
private Resource bannedKeywordsFile;

private URL myUrl() {
    return bannedKeywordsFile.getURL();
}

Справедливости ради, документы Google объясняют, что это ожидается, если обработчик протокола не зарегистрирован. Есть ли обработчик, который можно зарегистрировать? Или нужно писать с нуля?

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Одна из возможностей - игнорировать префикс «URL» Google GCS и обращаться к файлам по HTTP. Например:

gs://bucket/file

можно получить как:

http://storage.googleapis.com/bucket/file

См .:

Как получить или сгенерировать URL-адрес объекта введро?

Это в основном обходные пути первоначальное представление о gs://... как о чем-то особенном.

0 голосов
/ 21 октября 2019

gs - это схема, которая используется для идентификации ресурсов, хранящихся в Облачное хранилище Google Java URL выдает исключение, если protocol недопустимо. Затем вы получили это исключение: как вы можете использовать действительный URL, вы можете изменить

 gs://myproject.appspot.com/mybucket/myfile.csv

на

 https://storage.googleapis.com/my-prject-com/mybucket/myfile.svc

, а затем подтвердить с помощью Java URL, если это действительноURL.

ОБНОВЛЕНО

Исходя из того, что вы хотите сделать, вам нужно создать custom validator, чтобы в этот валидатор можно было добавлять разные схемы, вы можете использоватьUrlValidator общей библиотеки Apache. Затем вы можете добавить custom schmes следующим образом:

import org.apache.commons.validator.routines.UrlValidator;


    String[] customSchemes = { "gs", "file" };
    UrlValidator customValidator = new UrlValidator(customSchemes);
    customValidator.isValid("gs://www.somwebsite.org");// true
    customValidator.isValid("file:///home/user/Desktop/fileName.png");  // true

JIC, эту зависимость следует добавить, если вы используете maven:

    <!-- https://mvnrepository.com/artifact/commons-validator/commons-validator -->
    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.6</version>
    </dependency>

Или, если нет, тодля gradle

    // https://mvnrepository.com/artifact/commons-validator/commons-validator
    compile group: 'commons-validator', name: 'commons-validator', version: '1.6'
...