Использование версии Leigh S3Wrapper.cfc Не удается пройти через Init
Я новичок в S3, и мне нужно использовать его для хранения изображений. Я нашел полдюжины версий s2wrapper для cf, но похоже, что единственный набор для v4 - это модифицированный Ли
https://gist.github.com/Leigh-/26993ed79c956c9309a9dfe40f1fce29
Бросил в каталог com и создал "тестовую" страницу, которая содержит следующий код:
s3 = createObject('component','com.S3Wrapper').init(application.s3.AccessKeyId,application.s3.SecretAccessKey);
Таким образом, я изменил строку 37 из
variables.Sv4Util = createObject('component', 'Sv4').init(arguments.S3AccessKey, arguments.S3SecretAccessKey);
в
variables.Sv4Util = createObject('component', 'Sv4Util').init(arguments.S3AccessKey, arguments.S3SecretAccessKey);
Я чувствую, что пробежаться по коду Ли и начать что-то менять - плохая идея, так как я годами скрывался здесь и знаю, что код Ли надежен.
Кто-нибудь знает, есть ли примеры, как использовать это где-нибудь? Если не то, что я делаю не так. Если это имеет значение, я использую Lucee 5, а не движок Adobe от CF.
ОБНОВИТЬ:
Я следовал указаниям Ли, и теперь ошибка исчезла. Я добавил еще немного кода на мою тестовую страницу, которая теперь выглядит следующим образом:
<cfscript>
s3 = createObject('component','com.S3v4').init(application.s3.AccessKeyId,application.s3.SecretAccessKey);
bucket = "imgbkt.domain.com";
obj = "fake.ping";
region = "s3-us-west-1"
test = s3.getObject(bucket,obj,region);
writeDump(test);
test2 = s3.getObjectLink(bucket,obj,region);
writeDump(test2);
writeDump(s3);
</cfscript>
Независимо от того, что я вставляю для ведра, объекта или региона, я получаю:
JIC Я пошел в AWS и получил новые ключи:
Ли, если вы все еще рядом или кто-нибудь, как использовал один из s3Wrappers, какие-либо предложения или рекомендации?
ОБНОВЛЕНИЕ № 2: Даже после помощи Алекса я не могу заставить это работать. Ссылка, которую я получаю от getObjectLink, недействительна, и getObject никогда не загружает объект. Я думал, что попробую метод putObject
test3 = s3.putObject(bucketName=bucket,regionName=region,keyName="favicon.ico");
writeDump(test3);
чтобы узнать, есть ли какая-либо дополнительная информация, я получил это:
Я нашел эту статью https://shlomoswidler.com/2009/08/amazon-s3-gotcha-using-virtual-host.html но она довольно старая и, поскольку S3 специально предлагает использовать точки в именах сегментов, я этого не делаю актуально больше. Очевидно, что-то я делаю неправильно, но я потратил часы, пытаясь решить эту проблему, и я не могу понять, что это может быть.
1 ответ
Я дам вам краткое изложение того, что делает код:
getObjectLink
возвращает HTTP-URL для файла fake.ping
что найдено, глядя в ведро imgbkt.domain.com
области s3-us-west-1
, Эта ссылка является временной и истекает через 60 секунд по умолчанию.
getObject
Запускает getObjectLink
и немедленно запрашивает URL, используя HTTP GET. Затем ответ сохраняется в каталоге S3v4.cfc
с именем файла fake.ping
по умолчанию. Наконец, функция возвращает полный путь к загруженному файлу: E:\wwwDevRoot\taa\fake.ping
Чтобы сохранить файл в другом месте, вы должны вызвать:
downloadPath = 'E:\';
test = s3.getObject(bucket,obj,region,downloadPath);
writeDump(test);
HTTP-запрос является синхронным, то есть файл будет загружен полностью, когда функции вернут путь к файлу.
Если вы хотите получить доступ к фактическому содержимому файла, вы можете сделать это:
test = s3.getObject(bucket,obj,region);
contentAsString = fileRead(test); // returns the file content as string
// or
contentAsBinary = fileReadBinary(test); // returns the content as binary (byte array)
writeDump(contentAsString);
writeDump(contentAsBinary);
(Возможно, вы захотите потоковое содержимое, если файл большой, так как fileRead
/ fileReadBinary
читает весь файл в буфер. использование fileOpen
для потоковой передачи контента.
Это тебе помогает?