我正在尝试从用户在我的网络应用程序上传的图像的字节数组中创建MD5字符串。这是因为我希望这些图像分散在不同的文件夹中。这样,我就不必使用userID作为文件夹名称,看起来更专业。
结果会类似于:
结果会类似于:
/images/ 'first-two-char-of-md5' / 'the-complete-md5-string'.[jpg,png,bmp....]
这个方案是否是处理图片的好方法?
那么,以下是我从互联网上找到的代码:
protected void btnUpload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
if (CheckFileType(FileUpload1.FileName))
{
const int BUFFER_SIZE = 255;
Byte[] Buffer = new Byte[BUFFER_SIZE];
Stream theStream = FileUpload1.PostedFile.InputStream;
nBytesRead = theStream.Read(Buffer, 0, BUFFER_SIZE);
System.Text.ASCIIEncoding ASCIIEncoding = new ASCIIEncoding();
System.Text.UTF8Encoding utf8 = new UTF8Encoding();
//Just trying some stuff to see the output...
Label1.Text = ASCIIEncoding.GetString(CalculateMD5(theStream)) + "<br>" + utf8.GetString(CalculateMD5(theStream)) + "<br>" + Convert.ToBase64String(CalculateMD5(theStream));
}
}
}
private static byte[] _emptyBuffer = new byte[0];
public static byte[] CalculateMD5(Stream stream)
{
return CalculateMD5(stream, 64 * 1024);
}
public static byte[] CalculateMD5(Stream stream, int bufferSize)
{
MD5 md5Hasher = MD5.Create();
byte[] buffer = new byte[bufferSize];
int readBytes;
while ((readBytes = stream.Read(buffer, 0, bufferSize)) > 0)
{
md5Hasher.TransformBlock(buffer, 0, readBytes, buffer, 0);
}
md5Hasher.TransformFinalBlock(_emptyBuffer, 0, 0);
return md5Hasher.Hash;
}
结果。我从"calculateMD5()"得到一些输出,但当我尝试将其放入label1中以查看发生了什么时,只有一堆奇怪的字符。
我在这里做错了什么?我希望它是htmlsafe的...只有a-z、A-Z、0-9。
TransformFinalBlock
是一种表示“这是最后的数据,请完成哈希操作”的方式。或者,您可以将任何其他数据写入传递给CalculateMD5
的流的末尾(也许先将图像数据读入中间的MemoryStream
,然后附加额外的数据,并将MemoryStream
传递给CalculateMD5
)。 - mdm