有没有办法从客户端直接上传到backblaze?现在图片从客户端上传到php,然后再上传到backblaze,所以一个文件被上传了两次。我能把文件从Javascript发送到backblaze吗?
发布于 2018-06-03 07:03:08
我认为直接上传是可能的,因为CORS现在可用于b2。直接用ajax上传文件。
步骤1.使用帐号id和应用密钥获取authorizationToken令牌
步骤2.使用上面的authorizationToken获取上传url。
步骤3.将此url发送到客户端浏览器,并将文件直接上传到b2。
问题:如果您需要sha1进行验证,则为,这仅适用于支持HTML5的浏览器。点击此处阅读更多信息
Is it possible to compute a file's SHA1 ID using Javascript?
发布于 2021-04-16 20:14:57
对于任何仍在寻找解决方案的人,您现在可以使用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
https://stackoverflow.com/questions/37554667
复制相似问题