限制用户在 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/pngimage/gif 等)并基于此过滤请求。然而,这也不是万无一失的做事方式。如果有人将 exe 文件重命名为 png 并上传它会怎么样。
  • 从文件头读取文件类型:如果我没记错的话,每个文件的类型信息都存储在文件头中。您可以做的是读取文件内容并通过读取文件头来识别其类型,并确定文件类型是否是可接受的文件类型。您可能会发现此 link 对此很有用:http://www.exnol.com/how-to-open-unknown-files-without-extension.