从客户端上传到backblaze

时间:2016-05-31 20:02:03

标签: javascript php image api upload

有没有办法从客户端直接上传到backblaze? 现在图像从客户端上传到php然后再回溯,因此文件上传两次。 我可以将文件发送到Javascript的backblaze吗?

2 个答案:

答案 0 :(得分:1)

我认为可以直接上传,因为CORS现在可用于b2。使用ajax直接发布文件上传文件。

第1步。 使用帐户ID和应用程序密钥获取authorizationToken令牌

第2步。 使用上述authorizationToken获取上传网址。

第3步。 将此网址发送到客户端浏览器并直接将文件上传到b2。

问题:如果您需要sha1进行验证,则只能支持HTML5的浏览器。 在这里阅读更多

Is it possible to compute a file's SHA1 ID using Javascript?

https://developer.mozilla.org/en-US/docs/Web/API/File

https://www.backblaze.com/b2/docs/b2_upload_file.html

答案 1 :(得分:0)

对于仍在寻找解决方案的任何人,您现在可以使用 S3 预签名 URL。步骤如下

1- 从您的前端/JS 向服务器(在本例中为 PHP)发送一个 GET/POST 请求,请求一个预签名的 URL

$b2 = new Aws\S3\S3Client([
        'version' => 'latest',
        'endpoint' => 'https://xxx.backblazeb2.com',
        'region' => 'eu-xxx-xxx',
        'credentials' => array(
            'key'    => $_ENV['B2_KEY'],
            'secret' => $_ENV['B2_SECRKET'],
        )
    ]);

$cmd = $b2->getCommand('PutObject', [
            'Bucket' => $bucketName,
            'Key' => $subFolder . "" . $fileName,
            'ContentType' => $fileType,
        ]);
    
    
        $request = $b2->createPresignedRequest($cmd, '+20 minutes');
    
        // Get the actual presigned-url
        $presignedUrl = (string)$request->getUri();
    
        echo $presignedUrl;
    

2- 在前面获取您的回复,然后使用预先签名的 URL 代码上传您的文件(例如 Axios)

axios
     .put(b2PreSignedUrl, myFile)
     .then(response => {
     console.log(" -> B2 upload status " + JSON.stringify(response))

      }).catch(e => {
        console.log(" -> Error uploading video to B2 " + e)
       })

但最重要的是(否则您将收到 CORS 错误或超时错误),您需要通过命令行工具为存储桶创建自定义 CORS。这是我的 CORS 设置和 CLI 命令

b2 update-bucket --corsRules '[    
          {
              "corsRuleName": "downloadFromAnyOriginWithUpload",
              "allowedOrigins": [
                  "*"
              ],
              "allowedOperations": [
                  "s3_delete",
                  "s3_get",
                  "s3_head",
                  "s3_post",
                  "s3_put"
              ],
              "maxAgeSeconds": 3600
          }
      ]' <BUCKETNAME> allPublic