Google Storage:: Нажатие на "Public Link" загружает файлы
Я имею в виду ниже ссылку Github,
Фрагмент кода
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