关于文件上载的查询

本文关键字:上载 查询 文件 于文件 | 更新日期: 2023-09-27 18:00:15

我正在使用"文件上传"控件和C#编码(后端)在我的web应用程序中上传文件(.jpeg/.png/.pdf)。通过此控件上载的文件应保存在服务器中。一切都很好,但我面临的问题是,当一个xlsx或doc的文件类型被保存,并且该文件的扩展名被更改为.png或.jpeg并被上传时,它被上传到服务器,没有任何错误。

当我试图在服务器中打开该图像或pdf文件时,它通常会显示错误消息,文件无法打开。

我已经做了扩展验证,但在这种情况下没有显示任何效果。

有人能帮我解决这个问题吗。(C#编码或Jquery或javascript都可以)

关于文件上载的查询

以下是如何使用"头代码"最终获得所需的验证:

 System.IO.BinaryReader r = new System.IO.BinaryReader(FileUpload1.PostedFile.InputStream);
                                string fileclass = "";
                                byte buffer;
                                try
                                {
                                    buffer = r.ReadByte();
                                    fileclass = buffer.ToString();
                                    buffer = r.ReadByte();
                                    fileclass += buffer.ToString();
                                }
                                catch
                                {
                                }
                                r.Close();
                                if (fileclass != "3780" || fileclass != "255216" || fileclass != "13780")    /*Header codes (3780-PDF);(255216-JPG,JPEG);(13780-PNG)*/
                                  {
                                    /*Your code goes here(things to do with the file uploaded)*/
                                  }

要获取其他文件格式的值,请尝试上传文件并设置断点并获取头代码。

你能告诉我们你的验证是什么样子的吗?!有两种方法可以检查您正在上传的文件的扩展名。它应该如下所示:

//In your aspx file :
<asp:FileUpload ID="FileUploadControl" runat="server"/>
<asp:Button runat="server" id="Btn_Upload" text="Upload" onclick="Btn_Upload_Click" />
//In your aspx.cs file :
// First soluce
protected void Btn_Upload_Click(object sender, EventArgs e)
{
     if (FileUploadControl.PostedFile.ContentType != "application/pdf")
     {
          //Not an PDF
     }
}
// Second soluce :
protected void Btn_Upload_Click(object sender, EventArgs e)
{
     string extension = Path.GetExtension(FileUploadControl.PostedFile.FileName);
     if (extension != ".pdf")
     {
          //Not an PDF
     }
 }

当然,在这些代码示例中,您可以为JPEG/PNG/添加异常。。。

编辑、更新

但我的问题是扩展是一个合适的,我需要上传但文件类型不是我的意思是excel表格可以用扩展jpeg

您可以使用FileReader.readAsBinaryString()来检查文件头;例如,JFIF用于.jpeg.jpg;CCD_ 6代替CCD_;CCD_ 8代替CCD_;RegExp.prototype.test()RegExp /JFIF|PNG|PDF/


使用值设置为".jpeg,.jpg, .png,.pdf"<input type="file">元素中的accept属性,可以排除用户在Choose File对话框中选择扩展名不是.jpeg.jpg.png.pdf的文件。

document.querySelector("input[type=file]")
  .addEventListener("change", function(e) {
    console.log(e.target.files[0].type);
    var reader = new FileReader();
    reader.onload = function(event) {
      console.log(event.target.result
                  , /JFIF|PNG|PDF/.test(event.target.result))
    }
    reader.readAsBinaryString(e.target.files[0])
  })
<input type="file" accept=".jpeg,.jpg,.png,.pdf" />

有很多图像格式,比如webp,为什么不全部支持呢?在使用canvas上传之前,您可以在客户端转换它们。。。

function convertImage(image, mimetype, quality) {
  return new Promise(function(resolve){
    var canvas = document.createElement('canvas')
    canvas.width = image.width
    canvas.height = image.height
    canvas.getContext("2d").drawImage(image, 0, 0)
    canvas.toBlob(resolve, mimetype, quality)
  })
}
if(input.files[0].type === 'application/pdf') {
  // upload directly (not a image)
} else {
  var img = new Image
  img.onerror = function() { /* not an image */}
  img.onload = function() {
    convertImage(img, 'image/png', 1).then(function(blob){
      // upload the converted image
      fetch('upload', {method: 'POST', body: blob})
    })
  }
  img.src = URL.createObjectURL(input.files[0])
}

然后你用它来帮助过滤出你想要的接受文件

<input type="file" accept="application/pdf, image/*">