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