在ASP.net(C#)Web应用程序中,我使用HTML 5 canvas和java脚本创建了一个签名板。我们正在使用触摸设备(Android和iOS)捕获签名。
签名完成后,它会将数据从画布发送到服务器,然后将其转换为.bmp图像,并使用Bitmap.Save将其保存到服务器上根程序目录中名为签名文件的目录中。 ,格式)。到目前为止,这对几个客户来说已经好几个月了。
不幸的是,我目前正在捕捉异常,但没有将它们发送到任何地方(我目前正在纠正的巨大错误)。如果必须的话,我将使用一些异常输出重新编译代码,以便我可以获得更多信息,但由于它是一个新的客户端,我希望能够尽快解决这个问题,因为代码已经工作了很长时间没有问题,我很乐观它的服务器设置。
IIS7或Windows Server 2008中是否存在可能阻止应用程序将文件保存到服务器的安全设置。如果没有,可能需要在服务器上安装一些东西以允许以下内容:
byte[] imageBytes = Convert.FromBase64String(suffix);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
string thePath = Path.GetDirectoryName(saveLocation);
FileStream fs = new FileStream(thePath + @"\image.png", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(imageBytes);
bw.Close();
if (string.IsNullOrEmpty(Path.GetFileName(saveLocation)))
{
string filename = Path.GetRandomFileName();
filename = filename.Substring(0, filename.IndexOf('.'));
filename = filename + Path.GetRandomFileName();
filename = filename.Substring(0, filename.IndexOf('.'));
theSaveLocation = saveLocation + @"\" + filename + "." + format;
}
ms = new MemoryStream();
Bitmap input = (Bitmap)Bitmap.FromFile(thePath + @"\image.png");
Bitmap result = ProcessBitmap(input, Color.White);
result = (Bitmap)resizeImage((System.Drawing.Image)result, size);
result.Save(theSaveLocation, System.Drawing.Imaging.ImageFormat.Bmp);
input.Dispose();
result.Dispose();
ms.Close();
这是我上面使用的过程Bitmap函数
private Bitmap ProcessBitmap(Bitmap bitmap, Color color)
{
Bitmap temp = new Bitmap(bitmap.Width, bitmap.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(temp);
g.Clear(color);
g.DrawImage(bitmap, Point.Empty);
return temp;
}
这是我上面使用的resizeImage函数:
private static System.Drawing.Image resizeImage(System.Drawing.Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (System.Drawing.Image)b;
}