Google Storage:: Нажатие на "Public Link" загружает файлы

Я имею в виду ниже ссылку Github,

https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/storage/json-api/src/main/java/StorageSample.java

Фрагмент кода

public static void uploadFile(String bucketName, String targetPath, String filePath) throws Exception {
    Storage storage = getStorage();
    StorageObject object = new StorageObject();
    object.setBucket(bucketName);
    File file = new File(filePath);
    InputStream stream = new FileInputStream(file);
    try {
        // String contentType =
        // URLConnection.guessContentTypeFromStream(stream);
        InputStreamContent content = new InputStreamContent("image/jpeg", stream);
        Storage.Objects.Insert insert = storage.objects().insert(bucketName, null, content);
        insert.setName(targetPath + file.getName());
        insert.execute();
    } finally {
        stream.close();
    }
}

public static void uploadFile(String name, String targetPath, String contentType, File file, String bucketName)
        throws IOException, GeneralSecurityException, Exception {
    InputStreamContent contentStream = new InputStreamContent(contentType, new FileInputStream(file));
    contentStream.setLength(file.length());
    StorageObject objectMetadata = new StorageObject().setName(targetPath + name)
            .setAcl(Arrays.asList(new ObjectAccessControl().setEntity("allUsers").setRole("READER")));

    Storage client = getStorage();
    Storage.Objects.Insert insertRequest = client.objects().insert(bucketName, objectMetadata, contentStream);
    insertRequest.execute();
}

private static Storage getStorage() throws Exception {
    if (storage == null) {
        HttpTransport httpTransport = new NetHttpTransport();
        JsonFactory jsonFactory = new JacksonFactory();
        List<String> scopes = new ArrayList<String>();
        scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);
        // Collection<String> scopes = StorageScopes.all();
        Credential credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(jsonFactory).setServiceAccountId(getProperties().getProperty(ACCOUNT_ID_PROPERTY))
                .setServiceAccountPrivateKeyFromP12File(
                        new File(getProperties().getProperty(PRIVATE_KEY_PATH_PROPERTY)))
                .setServiceAccountScopes(scopes).build();

        storage = new Storage.Builder(httpTransport, jsonFactory, credential)
                .setApplicationName(getProperties().getProperty(APPLICATION_NAME_PROPERTY)).build();
    }
    return storage;
}


public static void main(String[] args) throws Exception {

        // CloudStorage.createBucket("my-bucket3/good");

        CloudStorage.uploadFile("my-static", "temp/",
                "/Users/rupanjan/Downloads/15676285_10158033346085311_1317913818452680683_o.jpg");

        CloudStorage.uploadFile("15676285_10158033346085311_1317913818452680683_o.jpg", "temp/", "image/jpeg",
                new File("/Users/rupanjan/Downloads/15676285_10158033346085311_1317913818452680683_o.jpg"),
                "my-static");

        // CloudStorage.downloadFile("my-bucket", "some-file.jpg",
        // "/var/downloads");

        List<String> buckets = CloudStorage.listBuckets();
        System.out.println(buckets.size());
    }

Проблема, с которой я сталкиваюсь,

Я могу загрузить файл успешно, но всякий раз, когда я нажимаю на эту "Общедоступную ссылку", она загружается автоматически. Мое намерение состояло в том, чтобы поделиться им со всеми пользователями с доступом для чтения. NB. Если я загружаю файл вручную из браузера, я могу открыть файл в браузере, но когда я загружаю его программно, он загружается каждый раз, когда я нажимаю "Public Link"

Пожалуйста, поправьте меня, если я что-то упустил!!

1 ответ

Звучит так, как будто вы знаете название группы и объекта, и что все объекты доступны для публичного чтения, и вам нужен URL-адрес, которым вы можете поделиться, который позволит другим пользователям читать объект.

Для этого не нужно использовать в консоли функцию "public link". Общедоступные URL-адреса могут быть созданы программно. Они следуют этой схеме:

https://storage.googleapis.com/bucket_name/object_name
Другие вопросы по тегам