Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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# ASP.NET在ashx处理程序中保存映像_C#_Asp.net_Vb.net - Fatal编程技术网

C# ASP.NET在ashx处理程序中保存映像

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

我有一个简单的处理程序(ASHX),它接收一个base64编码的图像,我想保存该图像

代码如下:

 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';
}