2010-12-27 3 views
0

Я создаю следующую форму для использования объекта POST с Google Storage, чтобы пользователь мог загрузить документ в мое ведро. При отправке формы я получаю следующую ошибку. Я уверен, что создаю свою политику неправильно, но я не уверен, как это сделать правильно, я пробовал несколько способов. Google's documentation explains the policy here. Спасибо за помощь!Google Storage - POST - проблема с созданием политики безопасности

<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> 
+0

Я пробовал не иметь никаких условий или условий = "", и это тоже не сработает. –

ответ

1

РЕШЕННЫЙ!

Это было так же просто, как это делает учебник - я слишком много изучал его. Просто установите $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" }'. 
         ']'. 
         '}'; 
+0

подумайте о том, чтобы этот ответ был «принят», щелкнув значок «tick» или «check» рядом с ним. –

+0

@ blasteralfredΨ. Я пытаюсь загрузить файл с помощью Google app engine в облачном хранилище Google. Я использую java для этого. Не могли бы вы рассказать мне, что такое ключевое значение $ в вышеприведенной инструкции $ policy. Ожидание вашего благоприятного ответа. – Sreekanth