Google Storage - POST - проблема с созданием политики безопасности - PullRequest
0 голосов
/ 27 декабря 2010

Я создаю следующую форму для использования объекта POST с Google Storage, чтобы пользователь мог загрузить документ в мое ведро. Я получаю следующую ошибку при отправке формы. Я уверен, что я создаю свою политику неправильно, но я не уверен, как это сделать правильно, я пробовал несколько способов. Документация Google объясняет политику здесь . Спасибо за вашу помощь!

    <Error> 

<Code>InvalidPolicyDocument</Code> − <Message> The content of the form does not meet the conditions specified in the policy document. </Message> 
− <Details> Invalid value for conditions: {"acl":"private","failure_action_redirect":"http:\/\/www.example.com\/failure_instructions.html"} </Details> 
</Error>


class Policy {
    public $expiration = "2010-12-31T11:11:11Z";
    public $conditions = array("acl" => "private",
                        "failure_action_redirect" => "http://www.example.com/failure_instructions.html");
}
$policy = new Policy();
$policy = json_encode($policy);

$policy_utf = utf8_encode($policy);
$policy_base64 = base64_encode($policy_utf);
$policy_sig = base64_encode(hash_hmac('sha1', $policy_base64, $secret, TRUE));
?>

<form action="http://<example_bucket>.commondatastorage.googleapis.com" method="post" enctype="multipart/form-data">
            <input type="hidden" name="key" value="test_documenttttt">
            <input type="hidden" name="GoogleAccessId" value="<?php echo $key; ?>">
            <input type="hidden" name="policy" value="<?php echo $policy_base64; ?>">
            <input type="hidden" name="signature" value="<?php echo $policy_sig; ?>">
            <input type="file" name="file">
            <input type="submit" value="Upload!">
</form>

1 Ответ

1 голос
/ 29 декабря 2010

РЕШИТЬ!

Это было так просто, как в учебнике, - я слишком много изучал. Просто установите $policy = <the code> и кодируйте UTF-8. Моя проблема была в том, что я бы установил $policy = <the example code>, но тогда я бы сделал json_encode (). Он уже JSON закодирован, так что кодировка JSON испортила его. Моя вина за чтение тоже много в это!

$policy = '{ "expiration": "2010-12-31T11:11:11Z",'.
                        '"conditions": ['.
                        '["starts-with", "$key", "" ],'.
                '{"acl": "private" }'.
                        ']'.
                        '}'; 
...