Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在将文件保存到计算机之前检查MD5_C#_.net_Md5 - Fatal编程技术网

C# 在将文件保存到计算机之前检查MD5

C# 在将文件保存到计算机之前检查MD5,c#,.net,md5,C#,.net,Md5,我想检查MD5哈希而不保存它 检查它是否已经存在 我试过下面的代码,但是如果文件还没有保存,它就不会计算文件的MD5 所以我想在字节数组中填充文件,然后获取该字节数组MD5,但这将使我的文件中没有字节 有什么建议吗?这是我的密码 public void ProcessRequest(HttpContext context) { if (context.Request.Files.Count > 0) { HttpFileCollection files =

我想检查MD5哈希而不保存它

检查它是否已经存在 我试过下面的代码,但是如果文件还没有保存,它就不会计算文件的MD5

所以我想在字节数组中填充文件,然后获取该字节数组MD5,但这将使我的文件中没有字节

有什么建议吗?这是我的密码

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Files.Count > 0)
    {
        HttpFileCollection files = context.Request.Files;
        for (int i = 0; i < files.Count; i++)
        {
            HttpPostedFile file = files[i];
            string ServerPath = context.Server.MapPath("~/uploads/" + file.FileName);
            string Name = file.FileName;
            string MD5 = GetMD5(ServerPath);
            int Size = file.ContentLength;
            string type = file.ContentType;
            file.SaveAs(ServerPath);   
        }
    }
}

因为这里的瓶颈是下载,所以在检查散列之前不保存文件并没有任何真正的优势。你可能想做的是下载到你的临时文件夹,然后最终自己删除它,或者让操作系统清理它,如果不需要的话

有关如何使用临时文件夹和临时文件的信息,请查看此答案:


一个更复杂的选项是在存储文件的同一台服务器上托管一个页面,并让它计算MD5:这样,您可以在下载之前检查MD5。否则,由于哈希是组成文件的物理字节的函数,因此需要整个文件(下载或存储的内存)来计算它。

您可以使用
HttpPostedFile
类中的
InputStream
属性。 要计算散列,请使用
HashAlgorithm
类的
ComputeHash
方法

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Files.Count > 0)
    {
        HttpFileCollection files = context.Request.Files;
        for (int i = 0; i < files.Count; i++)
        {
            HttpPostedFile file = files[i];
            var hasAlg=HashAlgorithm.Create("MD5");
            var MD5= hasAlg.ComputeHash(file.InputStream);

        }

    }
}
public void ProcessRequest(HttpContext上下文)
{
如果(context.Request.Files.Count>0)
{
HttpFileCollection files=context.Request.files;
对于(int i=0;i
您必须将其全部读取到内存中,然后进行检查,然后将其写入磁盘。无论哪种方式,它都必须从客户端到服务器,这样您就不会为自己节省任何带宽。我会说,将它写入服务器上的临时位置,检查MD5,如果已经得到它,则删除temp,否则将其复制到正确的位置。这不会花费太多时间吗?如果一开始连文件都没有,您希望如何计算文件的MD5?!您可以让用户键入文件的MD5。。。如果你能相信他们会做得很好,那么这是我问的最好的方式?也许你可以,但我不确定结果的一致性和可靠性,假设这是一个客户端用户上传场景。他们没有自己的服务器,您可以在其中检查他们的MD5值。这只是一个带有上传文件按钮的简单网页,所以我可以把它保存到Different path check md5,然后做任何事情,这个临时文件夹我可以创建自己的吗?
public void ProcessRequest(HttpContext context)
{
    if (context.Request.Files.Count > 0)
    {
        HttpFileCollection files = context.Request.Files;
        for (int i = 0; i < files.Count; i++)
        {
            HttpPostedFile file = files[i];
            var hasAlg=HashAlgorithm.Create("MD5");
            var MD5= hasAlg.ComputeHash(file.InputStream);

        }

    }
}