Я использую Force.com Apex и VF, пытаясь использовать CloudMan для управления контентом. Я застрял на следующее из Chrome (не знаю, почему он показывает «неопределенными», как Облако Имя определяется в JS):CloudQuery Upload Авторизация
POST https://api.cloudinary.com/v1_1/undefined/upload 401 (Unauthorized) ...... api.cloudinary.com/v1_1/undefined/upload:1
В момент разочарования бы очень признателен за любую помощь. Вот код (обратите внимание на комментарии):
- АПЕКС
:
public String getCldSig() {
Datetime d = datetime.now();
Long uxtime = d.getTime()/1000; //method provides epoch/unix time
String apisec = '<some_secret>';
String serial = 'callback=<some_url>&public_id=<some_id>×tamp=' + uxtime + apisec;
Blob sha = Crypto.generateDigest('SHA1', Blob.valueOf(serial));
String sig = EncodingUtil.convertToHex(sha); //perhaps I need to do UTF-8
String jsoSerial = '{"public_id":"<some_Id>",';
jsoSerial += '"timestamp":"'+ uxtime + '",';
jsoSerial += '"callback":"<some_url>",'; //maybe an issue with hosting the CORS html on a VF page.
jsoSerial += '"signature":"' + sig + '",';
jsoSerial += '"api_key":"<some_key>"}';
return jsoSerial.escapeHtml3(); //seems to be the right escape output HTML
}
Javascript/JQuery:
$.cloudinary.config({"api_key":"<some_key>", "cloud_name":"<some_id>"}); $('.cloudinary-fileupload') .fileupload({ dropZone: ".sceneUpBtn", progress: function (e, data) { $(".progress").text("Uploading... " + Math.round((data.loaded * 100.0)/data.total) + "%"); } }); $('.cloudinary-fileupload').bind('fileuploadstart', function(e){ $('.sceneUpPrev').html('Upload started...'); }); $('.cloudinary-fileupload').bind('fileuploadfail', function(e){ $('.sceneUpPrev').html($.cloudinary.error); //**due to lack of documentation don't know how to get any specific error message using the jQuery library. Would expect messages similar to AWS S3 }); $('.cloudinary-fileupload').bind('cloudinarydone', function(e, data) { $('.sceneUpPrev').html( $.cloudinary.image(data.result.public_id, { format: data.result.format, version: data.result.version, crop: 'scale', width: 200 })); $('.image_public_id').val(data.result.public_id); return true; });
Входной HTML:
<input class="cloudinary-fileupload"
data-cloudinary-field="upref"
data-form-data=""public_id":"<some_id>","timestamp":"1372282433","callback":"<some_url>","signature":"<some_sig>","api_key":"<some_key>"}"
id="sceneUpload"
name="file"
type="file">
не могли бы вы, пожалуйста, объяснить свой второй пункт немного больше? Вы пробовали динамически заполнять параметры JSON или вы создаете их на странице загрузки? – IvanR
Моя первоначальная ошибка заключалась в заполнении параметров JSON непосредственно в атрибуте INPUT «data-form-data». Виджет FileUpload создавал экземпляр до того, как были установлены данные «data-form-data», в результате чего аутентификация завершилась неудачно, потому что данные «data-form-data» были пустыми при передаче в Cloudinary. Чтобы решить проблему, вы не должны заполнять «данные-данные-данные», вместо этого добавьте параметр «formData» (то же самое) при загрузке виджета FileUpload. –
Спасибо, я сделал ту же ошибку, что и обновление атрибута data-form-data напрямую. Единственное, что я хотел бы добавить для тех ленивых, которые только ищут ответы при переполнении стека и не читают документацию - параметр 'formData' в' fileupload' ожидает JSON-хэш (или объект JavaScript) и ** NOT * * Сериализованная строка JSON – IvanR