Azure 媒体服务限制文件大小
Azure Media Services Limit File Size
查看 Azure 媒体服务 REST API 我看不到任何限制文件上传大小的方法:
https://docs.microsoft.com/en-us/azure/media-services/media-services-rest-upload-files
例如,我希望用户直接将文件上传到 Azure,但将其限制为 50mb。我不想先通过我的服务器代理请求,因为这似乎是不必要的带宽使用。
可以用 Azure 做到这一点吗?如果无法直接在 Azure 上执行此操作,那么间接限制文件上传大小的最佳方法是什么?
从 http://wely-lau.net/2012/02/26/uploading-big-files-in-windows-azure-blob-storage-with-putlistblock/ 开始,也许这样的方法可行(隐式最大 64MB):
protected void btnUpload_Click(object sender, EventArgs e)
{
CloudBlobClient blobClient;
var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExist();
var permission = container.GetPermissions();
permission.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permission);
string name = fu.FileName;
CloudBlockBlob blob = container.GetBlockBlobReference(name);
blob.UploadFromStream(fu.FileContent);
int maxSize = ....;
if (fu.PostedFile.ContentLength > maxSize)
{
// Handle error: file too large
} else {
blob.UploadFromStream(fu.FileContent);
}
如果您不想代理上传,则需要使用浏览器端验证。 HTML5的File API有答案。
来自:
if (typeof FileReader !== "undefined") {
var size = document.getElementById('myfile').files[0].size;
// check file size
}
当然这不会阻止用户使用像 Postman 这样的东西来解决这个限制,但我的意思是,来吧,
如果您对视频的持续时间而不是原始文件大小更感兴趣,您绝对需要先代理内容字节——有关更多信息,请参阅此线程:
如果您不使用代理解决方案,那么您就是在向最终用户公开 Azure storage Shared Access signature。没有任何与之相关的大小限制。您唯一可以采取的缓解措施是限制 saas 签名有效的时间,以便用户在有限的时间范围内进行上传。客户端上的任何验证都只能部分缓解上传大文件的问题。如前所述,用户可以通过调试客户端脚本从 ui 获取 saas link,并在 link 有效的时间范围内将任何内容大小上传到其中。
Azure 存储没有公开任何 api 来限制文件上传大小,所以现在唯一适合您的场景的防弹解决方案是使用代理。
查看 Azure 媒体服务 REST API 我看不到任何限制文件上传大小的方法:
https://docs.microsoft.com/en-us/azure/media-services/media-services-rest-upload-files
例如,我希望用户直接将文件上传到 Azure,但将其限制为 50mb。我不想先通过我的服务器代理请求,因为这似乎是不必要的带宽使用。
可以用 Azure 做到这一点吗?如果无法直接在 Azure 上执行此操作,那么间接限制文件上传大小的最佳方法是什么?
从 http://wely-lau.net/2012/02/26/uploading-big-files-in-windows-azure-blob-storage-with-putlistblock/ 开始,也许这样的方法可行(隐式最大 64MB):
protected void btnUpload_Click(object sender, EventArgs e)
{
CloudBlobClient blobClient;
var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
container.CreateIfNotExist();
var permission = container.GetPermissions();
permission.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permission);
string name = fu.FileName;
CloudBlockBlob blob = container.GetBlockBlobReference(name);
blob.UploadFromStream(fu.FileContent);
int maxSize = ....;
if (fu.PostedFile.ContentLength > maxSize)
{
// Handle error: file too large
} else {
blob.UploadFromStream(fu.FileContent);
}
如果您不想代理上传,则需要使用浏览器端验证。 HTML5的File API有答案。
来自:
if (typeof FileReader !== "undefined") {
var size = document.getElementById('myfile').files[0].size;
// check file size
}
当然这不会阻止用户使用像 Postman 这样的东西来解决这个限制,但我的意思是,来吧,
如果您对视频的持续时间而不是原始文件大小更感兴趣,您绝对需要先代理内容字节——有关更多信息,请参阅此线程:
如果您不使用代理解决方案,那么您就是在向最终用户公开 Azure storage Shared Access signature。没有任何与之相关的大小限制。您唯一可以采取的缓解措施是限制 saas 签名有效的时间,以便用户在有限的时间范围内进行上传。客户端上的任何验证都只能部分缓解上传大文件的问题。如前所述,用户可以通过调试客户端脚本从 ui 获取 saas link,并在 link 有效的时间范围内将任何内容大小上传到其中。
Azure 存储没有公开任何 api 来限制文件上传大小,所以现在唯一适合您的场景的防弹解决方案是使用代理。