일부 컨텐츠 관리에 Cloudinary를 사용하려고하는 Force.com Apex 및 VF를 사용하고 있습니다. 나는 (클라우드 이름은 JS에 정의로는 '정의되지 않은'쇼 왜 확실하지) 크롬에서 다음에 붙어 : 좌절의 시점에서Cloudy jQuery 업로드 권한 부여
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
}
자바 스크립트/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 :에서 POST URL의
<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로 전달 될 때 비어있어 인증에 실패했습니다. 해결하려면 "data-form-data"를 채우지 말고 FileUpload 위젯을로드 할 때 "formData"매개 변수를 채우십시오 (같은 차이). –
감사합니다. 데이터 폼 데이터 속성을 직접 업데이트하는 실수를 저질렀습니다. 스택 오버플로에서만 응답을 찾고 문서를 읽지 않는 게으른 사람들을 위해 추가하고 싶은 유일한 점은'fileupload' 함수의'formData' 매개 변수는 JSON 해시 (또는 JavaScript 객체)와 ** NOT * * 직렬화 된 JSON 문자열 – IvanR