2

我们正在使用 AIR/AS3 开发应用程序,并希望通过客户端的 REST API 将图片上传到 cloudinary,而不是使用 Node.js。

阅读 cloudinary 的文档,我们发现应该通过 HTTP/S POST 请求(http://cloudinary.com/documentation/upload_images#remote_upload)来完成。

我们尝试使用 URLLoader 和 URLRequest 将参数作为 URLVariables 传递。

将其用作 URL: 'https://api.cloudinary.com/v1_1/'+ CLOUD_NAME +'/raw/upload'

代码如下所示:

public function uploadImage(imageVO:CameraUIImageVO):void {
    var loader:URLLoader = new URLLoader();

    loader.dataFormat = URLLoaderDataFormat.BINARY;

    loader.addEventListener(Event.COMPLETE, completeHandler, false, 0, true);
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler, false, 0, true);
    loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler, false, 0, true);
    loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);

    var request:URLRequest = new URLRequest(_url);

    request.data = getVariables(imageVO);
    request.method = URLRequestMethod.POST;

    loader.load(request);
}

private function getVariables(imageVO:CameraUIImageVO):URLVariables {
    var variables:URLVariables = new URLVariables();
    variables.timestamp = _timestamp;

    var bitmapData:BitmapData = imageVO.image.bitmapData;
    var rawBytes:ByteArray = bitmapData.encode(bitmapData.rect, new JPEGEncoderOptions(50));
    variables.file = rawBytes;
    variables.resource_type = 'raw';

    variables.signature = getSignature("anyPublicId");
    variables.api_key = API_KEY;

    return variables;
}

private function getSignature(publicId:String):String {
    var toHash:String =
            "public_id="+ publicId
            + "&timestamp=" + timestamp
            + API_SECRET;

    var src:ByteArray = Hex.toArray(Hex.fromString(toHash));
    var sha1:SHA1 = new SHA1();
    var hashedString:String = Hex.fromArray(sha1.hash( src ));

    return hashedString;
}


private function get timestamp():String {
    return _timestamp = Number(new Date().time).toString();
}

结果是 http 错误 401

4

1 回答 1

1

似乎您正在签署public_id,但是public_id没有传入上传本身的选项。即,没有:

variables.public_id = "anyPublicId";

方法里面getVariables

于 2015-03-22T13:05:43.143 回答