[Eкипен проект с JS - фотогалерия] Как точно да кача снимките в Kinvey?
Добро утро,
казусът е следния. Според документацията на Kinvey, трябва да се направи POST заявка към Kinvey. В respons-a получаваш "_uploadURL" на който да си качиш някакъв фаил. Този URL е в Google Cloud Storage. В документацията на KInvey пише " Next, extract the _uploadURL
from the response body and upload the file by making a PUT request to this URL". Така, дотук всичко е ясно. Даден е линк към този Google Storage за подробности. От там става ясно че за PUT заявка към URL-a са необходими : screenshot
Та основния въпрос е този "Authorization" какъв е?
И, изобщо, дали подходът ми за качване на снимки е правилен?
Привет,
пускам първоначалната POST заявка към Кинви, то ми връща следното: ЦЪК
"_requiredHeaders" са празни, няма нищо?
Съответно пускам PUT заявка към съответния "_uploadURL", само PUT, без никакви хедъри. И получавам това - ЦЪК
От къде да ги взема тези Google secret key and signing method?
Линкни скрийншот/и със самата PUT заявка в браузъра, да се вижда RequestUrl то, header-ите, response header-ите. Доколкото виждам от скрийншота ти си объркал/мутирал Signature-a в заявката.
Signature
PUT
PUT request
Не му подавам никакви хедъри, защото трябвало да се вземат от първоначалната POST заявка към Кинви, пък тя не ми връща никакви "_requiredHeaders" ( има скрииншот в предишния ми пост). Та, мисля си, дали не бъркам нещо в POST заявката, за да не ми връща правилен response?
Error-a e доста ясен - пращаш грешен Signature, _requiredHeader-и да няма е нормално в дадени ситуации, aко си получил uploadURL едва ли имаш проблем в POST заявката.
С Postman ли тестваш? За хедърите имах предвид че browser-ите пускат някои header-и автоматично. Обикновено един от тях е Content-Length който е задължителен за заявката, въпреки че както казах error-a изглежда ясен затова искам да качиш пълното URL и друга информация покрай request-a.
POST to Kinvey - option
POST to Kinvey - real post
response data from Kinvey
Put to uploadURL
До сега тествах рекуестите през RESTClient на Мозила, това вече са заявки от приложението. Явно не мога да схвана откъде да взема тоя signature.
Ок разгледах проблема в подробност и ето какво излезе. Signature-a който Google ще очаква е различен, ако заявката ще изпраща и Content-Type (който jQuery.ajax автоматично адва, ако не специфицираш обратното). Ако не специфицираш експлицитно при POST заявка към Kinvey със специфичният header "X-Kinvey-Content-Type" че ще изпращаш и Content-Type-а, той ще генерира Signature който не взема в предвид ContentType (иначе казано Signature който ще е невалиден, ако в заявката към Google имаш Content-Type header). Надявам се виждаш на къде бия вече, едно решение е да си добавиш към POST заявката към Kinvey "X-Kinvey-Content-Type" header със типа на файлът (можеш да го видиш във пропъртитата на файлът който ще качваш) и след това да сетнеш Content-Type header-a при PUT заявката към Google Cloud-a на същият (обърни внимание тук, ако имаш нещо което ти настройва автоматично header-ите да не го пренапише). Също имай предвид че ъплоадването на файлове чрез jQuery.ajax изисква още малко настройки.
Google Signature Requirment
Kinvey Specifying Content Type
PS: Честно казано може да ти е по лесно просто да свалиш и да им използваш библиотеката както бях написал нагоре.
Edit: Очевидно Google не очаква информацията като FormData, просто трябва да не я JSON.Stringify-ваш и да подадеш в Ajax option-ите "processData: false".
Edit2: Премахнах линковете за FormData upload-а, защото може да са по объркващи от колкото помагащи. Изпращането на файл може да го направиш по абсолютно същия начин както си изпращаш JSON-ите, с разликите че трябва да НЕ stringify-ваш информацията и трябва да зададеш "processData: false" на Ajax-a за да не я stringify-не без да те пита.
Благодаря за отделеното време и подробния отговор,
мисля, че разбрах откъде идва проблема. Когато се добера до комп ще го тествам и ще пиша какво е станало.
Добро утро,
пак не стана, писна ми да се занимавам с Кинвито, предпиемам друга стратегия. Както беше споменал един пич в по - горните постове реших да си кача снимките в друг облак, а не задължително в Google Storage и да подавам към Kinvey само URL-лите.
Така, спрях се на Ospry (на линка има инфо как точно се качват снимките), изкарал съм си uploadURL, който е валиден и само се опитвам да го подам към Кинви, като обикновенна data, но пак не става .... Къде бъркам? Ето кода :
Просто не мога да го накарам да изпълни заявката към Кинви, иначе всичко друго работи.
Честно казано има много проблеми със това дето си постнал, ама щом си решил ето ти го поправено.
Юзър-а който използвам е мой смени го с такъв за твоя app и никога не си поствай или използвай master-secret-а в клиентски код. А да и съм си сложил jQuery локално, така че пътя към него ще ти е различен.
Подкарах го, благодаря! Много време изгубихме с начина за качване който е описан в Кинви и сега въпроса е просто да имаме нещо работещо, макар и не перфектно.