, Так что-то вроде:
аюсь собрать программу Hello World для тестирования Google Cloud Storage. Моя цель - создать простейшую программу, которая просто загружает жестко запрограммированный файл в облачное хранилище.
Я искал интернет для основного учебника, но самое близкое, что я мог найти, этоэто руководство для использования облачного хранилища из App Engine. Я собрал эту программу:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import com.google.cloud.storage.Acl;
import com.google.cloud.storage.Acl.Role;
import com.google.cloud.storage.Acl.User;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
public class Main {
public static void main(String[] args) throws FileNotFoundException{
FileInputStream fileInputStream = new FileInputStream("my-file.txt");
Storage storage = StorageOptions.getDefaultInstance().getService();
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder("my-cloud-storage-bucket", "my-file.txt")
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
.build(),
fileInputStream);
String fileUrl = blobInfo.getMediaLink();
System.out.println("Uploaded URL: " + fileUrl);
}
}
Когда я запускаю этот код, я получаю401 Unauthorized
ошибка при звонкеstorage.create()
и это не удивительно, потому что я не предоставляю имя пользователя или пароль. Я понимаю, это потому, что пример работает в App Engine, который предоставляет учетные данные таким образом.
Я попытался передать свои учетные данные через файл свойств:
Credential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("accountId")
.setServiceAccountPrivateKeyFromP12File(
new File("PRIVATE_KEY_PATH"))
.setServiceAccountScopes(scopes).build();
Storage storage = new StorageOptions.DefaultStorageFactory().create(StorageOptions.newBuilder().setCredentials(credential).build());
Но это не компилируется, потому чтоsetCredentials()
функция нуждается вCredentials
экземпляр, а неCredential
экземпляр.
Я гуглил и читалAPI облачного хранилища, но я все еще не могу понять, как я должен передать учетные данные, не пройдя запутанный процесс установки.
Так,мой вопрос: Какой самый простой способ предоставить учетные данные в облачное хранилище Google для загрузки файла?
Для справки: я пытаюсь сравнить и сопоставить Google Cloud Storage и Amazon S3. Я могу создать такую программу на S3 без проблем, но по какой-то причине я попал в кирпичную стену с Cloud Storage. Определенно ценю любые идеи или базовые уроки, которые кто-нибудь может мне дать.