限制用户在 Azure 上上传某种类型
Restrict user to upload a certain type on Azure
我正在开发一个 Web 应用程序,我想限制用户在 Azure blob 上上传特定类型,例如仅图像或 PDF。
有什么方法可以在我点击上传图片的时候,检查它是不是图片?如果它不是图像,它会拒绝请求吗?最好在服务器端进行验证
这是我使用的编码:
<div>
Select Image to upload a ClassDiagram
<input name="classdiagram" type="file" multiple="multiple" accept="image/*">
<input type="submit" value="Upload Image" />
</div>
public ActionResult ImageUpload()
的部分代码
var dfd = Request.Files["dfd"];
var classdiagram = Request.Files["classdiagram"];
// Code hidden for Brevity. Multiple var instances.
// --- SETTING UP THE CONTAINER --- //
// Create the CloudStorageAccount
StorageCredentials credentials = new StorageCredentials("swiftdevelopmentstorage", "HqaCkZjdQ8w/DX/fS3wDxU6HXbeqV5EZ1b+UQaKALxaJDrN9JoZZYn8Q0KT6QR4tCrdGQicxE+tKRKScjINW8w==");
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve Reference to container
CloudBlobContainer container = blobClient.GetContainerReference("systemdesign");
// Create if nonexistent
container.CreateIfNotExists();
// Change Default Private Permission to Public
container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
// Depending on the Design type (e.g. Flowchart, dfd..) the blob will be uploaded to a different sub folder
if (dfd != null)
{
string uniqueBlobName = string.Format("dfd/image_{0}{1}",
Guid.NewGuid().ToString(), Path.GetExtension(dfd.FileName));
CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName);
// Rest of the code is all other if cases for the remaining Request.Files
问题是 accept="image/*"
,如果用户切换到 "Show All"
,仍然不拒绝上传其他扩展
The problem is that the accept="image/*", still doesn't deny uploading
of other extensions if the users switches to "Show All"
你是对的。这样,您将无法阻止用户上传任何文件。
您可以做的事情很少:
- 检查上传内容的内容类型:一种方法是检查上传内容的内容类型。对于图像,它将是
image/*
(例如 image/png
、image/gif
等)并基于此过滤请求。然而,这也不是万无一失的做事方式。如果有人将 exe
文件重命名为 png
并上传它会怎么样。
- 从文件头读取文件类型:如果我没记错的话,每个文件的类型信息都存储在文件头中。您可以做的是读取文件内容并通过读取文件头来识别其类型,并确定文件类型是否是可接受的文件类型。您可能会发现此 link 对此很有用:http://www.exnol.com/how-to-open-unknown-files-without-extension.
我正在开发一个 Web 应用程序,我想限制用户在 Azure blob 上上传特定类型,例如仅图像或 PDF。
有什么方法可以在我点击上传图片的时候,检查它是不是图片?如果它不是图像,它会拒绝请求吗?最好在服务器端进行验证
这是我使用的编码:
<div>
Select Image to upload a ClassDiagram
<input name="classdiagram" type="file" multiple="multiple" accept="image/*">
<input type="submit" value="Upload Image" />
</div>
public ActionResult ImageUpload()
的部分代码var dfd = Request.Files["dfd"];
var classdiagram = Request.Files["classdiagram"];
// Code hidden for Brevity. Multiple var instances.
// --- SETTING UP THE CONTAINER --- //
// Create the CloudStorageAccount
StorageCredentials credentials = new StorageCredentials("swiftdevelopmentstorage", "HqaCkZjdQ8w/DX/fS3wDxU6HXbeqV5EZ1b+UQaKALxaJDrN9JoZZYn8Q0KT6QR4tCrdGQicxE+tKRKScjINW8w==");
CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Retrieve Reference to container
CloudBlobContainer container = blobClient.GetContainerReference("systemdesign");
// Create if nonexistent
container.CreateIfNotExists();
// Change Default Private Permission to Public
container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
// Depending on the Design type (e.g. Flowchart, dfd..) the blob will be uploaded to a different sub folder
if (dfd != null)
{
string uniqueBlobName = string.Format("dfd/image_{0}{1}",
Guid.NewGuid().ToString(), Path.GetExtension(dfd.FileName));
CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName);
// Rest of the code is all other if cases for the remaining Request.Files
问题是 accept="image/*"
,如果用户切换到 "Show All"
The problem is that the accept="image/*", still doesn't deny uploading of other extensions if the users switches to "Show All"
你是对的。这样,您将无法阻止用户上传任何文件。
您可以做的事情很少:
- 检查上传内容的内容类型:一种方法是检查上传内容的内容类型。对于图像,它将是
image/*
(例如image/png
、image/gif
等)并基于此过滤请求。然而,这也不是万无一失的做事方式。如果有人将exe
文件重命名为png
并上传它会怎么样。 - 从文件头读取文件类型:如果我没记错的话,每个文件的类型信息都存储在文件头中。您可以做的是读取文件内容并通过读取文件头来识别其类型,并确定文件类型是否是可接受的文件类型。您可能会发现此 link 对此很有用:http://www.exnol.com/how-to-open-unknown-files-without-extension.