关于文件上载的查询
本文关键字:上载 查询 文件 于文件 | 更新日期: 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/*">