【发布时间】:2019-06-21 02:34:35
【问题描述】:
我无法找到一个可行的示例。 下面的例子告诉我 createBlockBlob 方法是未定义的。
注意:我也尝试过 createBlockBlobFromLocalFile 并传入文件名,但仍然没有成功。
import React from 'react';
var storage = require('azure-storage');
const CONNECTION_STRING = "MYCONNECTIONSTRING";
const BlockBlobContainerName = "MYCONTAINERNAME";
const BlobName = "MYBLOBNAME";
class NumberUploader extends React.Component {
render() {
return (
<div className="App">
<input type="file" onChange={ (e) => this.buttonClick(e.target.files[0]) } />
</div>
);
}
buttonClick(myFile) {
var blobService = storage.createBlobService(CONNECTION_STRING);
blobService.createContainerIfNotExists(BlockBlobContainerName, function (error) {
if (error) {
console.log("error creating container");
}
});
blobService.createBlockBlobFromBrowserFile(BlockBlobContainerName, BlobName, myFile, function (error, result, response) {
if (error) {
alert('Upload failed, open browser console for more detailed info.');
console.log(error);
} else {
setTimeout(function () { // Prevent alert from stopping UI progress update
alert('Upload successfully!');
}, 1000);
}
});
}
};
export default NumberUploader;
编辑: Visual Studio 提供了一个非常好的运行 .Net Core 服务 React 的 Web 应用程序模板。我能够在服务器上使用以下代码来获取 SASToken 并将其传递给 React。从那里,您可以对 SAS 使用浏览器文件上传方法。
static string GetAccountSASToken()
{
// To create the account SAS, you need to use your shared key credentials. Modify for your account.
const string ConnectionString = "GET_STRING_FROM_STORAGE_ACCOUNT";
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
// Create a new access policy for the account.
SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
{
Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.List,
Services = SharedAccessAccountServices.Blob | SharedAccessAccountServices.File,
ResourceTypes = SharedAccessAccountResourceTypes.Service,
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
Protocols = SharedAccessProtocol.HttpsOnly
};
// Return the SAS token.
string token = storageAccount.GetSharedAccessSignature(policy);
return token;
}
【问题讨论】:
-
即使当您调用
createBlockBlobFromBrowserFile时,您是否收到与createBlockBlob方法未定义相同的错误消息?您使用的azure-storageSDK 的版本是什么?另外,我假设您使用的是 SAS 令牌。 -
@GauravMantri 抱歉。在这个问题上敲了 8 个小时后,我有点懒惰了。我找不到 createBlockBlobFromBrowserFile。我没有使用 SAS 令牌。我正在使用 connectionString 并使用通配符设置 CORS 规则,以便我可以使用 localhost 上传。 azure-storage@2.10.3
标签: reactjs azure azure-storage azure-blob-storage