我正在使用“文件上传”控件和C#编码(后端)在我的网络应用程序中上传文件(.jpeg / .png / .pdf)。 通过此控件上传的文件应保存在服务器中。 一切正常,但我遇到的问题是当保存了xlsx或doc的文件类型并且该文件的扩展名更改为.png或.jpeg并且正在上载时,它正被上传到服务器而没有任何错误
当我尝试在服务器中打开该图像或pdf文件时,通常显示错误消息,文件无法打开。
我已经完成了扩展验证,但在这种情况下它没有显示任何效果。
任何人都可以帮我摆脱这个问题。(无论是C#编码还是Jquery或javascript都可以)
答案 0 :(得分:0)
修改,更新
但我的问题是扩展是我需要上传的正确扩展 但文件类型不是我的意思是可以保存excel表 扩展jpeg
您可以使用FileReader
,.readAsBinaryString()
来检查文件标头;例如,JFIF
.jpeg
,.jpg
; PNG
的{{1}}; .png
的{{1}}; PDF
.pdf
RegExp.prototype.test()
RegExp
使用/JFIF|PNG|PDF/
元素的accept
属性,将值设置为<input type="file">
,以排除扩展名不仅仅是".jpeg,.jpg, .png,.pdf"
,.jpeg
,.jpg
的文件或.png
用户可以在.pdf
对话框中选择。{/ p>
Choose File
&#13;
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])
})
&#13;
答案 1 :(得分:0)
您能告诉我们验证的样子吗? 有两种方法可以检查要上载的文件的扩展名。它应该是这样的:
//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 / ...
添加例外答案 2 :(得分:0)
以下是我最终能够使用“标题代码”进行验证的方法:
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)*/
}
要获取其他文件格式的值,请尝试上传文件并设置断点并获取标题代码。
答案 3 :(得分:0)
有很多图像格式,例如webp为什么不支持它们? 您可以在使用画布上传它们之前将它们转换为客户端...
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/*">