C# ASP.NET在ashx处理程序中保存映像
我有一个简单的处理程序(ASHX),它接收一个base64编码的图像,我想保存该图像 代码如下:C# ASP.NET在ashx处理程序中保存映像,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我有一个简单的处理程序(ASHX),它接收一个base64编码的图像,我想保存该图像 代码如下: Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest Dim imageInfo = context.Request("imgData") Dim imageData As String() = imageInfo.Split(",") ' chec
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim imageInfo = context.Request("imgData")
Dim imageData As String() = imageInfo.Split(",")
' check that there are two parts; ie the header and the string data.
If imageData.Length < 2 Then
context.Response.Write("error")
Return
End If
' Example of imageInfo
' data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE...
Dim imageType As String = imageData(0)
Dim imageString As String = imageData(1)
If imageType <> "data:image/png;base64" Then
context.Response.Write("error")
Return
End If
imageString = imageString.Replace(" ", "+")
Dim bytes As Byte()
bytes = Convert.FromBase64String(imageString)
Dim image As System.Drawing.Image
Using ms As MemoryStream = New MemoryStream(bytes)
image = System.Drawing.Image.FromStream(ms)
End Using
image.Save("test", System.Drawing.Imaging.ImageFormat.Png)
End Sub
在调试器中检查图像时,它似乎正常。它正确地获取图像的高度和宽度
有人知道错误在哪里吗?我很尴尬。问题是“test”不是正确的文件路径。我正在我的本地机器上测试这一点,当我使用完整路径时,它马上就工作了。异常stacktrace是否会给您一个行号?只是猜测:尝试使用语句将图像保存在
中,因为原始流可能会被释放,数据丢失您无法将图像读入字符串。必须使用UTF8编码将其读入字节数组。使用UTF8.Encoding的流类。@RubensFarias我尝试过这个,但不幸的是没有成功。谢谢你的建议,不过,我想它会有用的。@jdweng抱歉,我不知道你在说什么。我获取base64编码字符串并将其转换为字节数组。错误发生在“image.Save…”行上
/*get file name and image data from POST*/
$filename = $_POST['filename'];
$data = $_POST['imgdata'];
list( $type, $data ) = explode( ';', $data );
list( $base, $data ) = explode( ',', $data );
/*check that image data is base64 of png*/
if ( $type === 'data:image/png' && $base === 'base64') {
$data = base64_decode( $data );
file_put_contents( '../pathtosave/' . $filename, $data );
echo 'saved';
} else {
echo 'error';
}