从字节数组打开 jpeg

Open jpeg from byte array

我有一个程序,用户可以在其中保存合同附件。附件保存在一个varbinary 数据库中。然后用户可以查看附件。

我正在将文件保存到一个临时位置,同时他们查看文件,然后在进程关闭后删除文件。这适用于 word 和 excel 文档,但不适用于 jpeg 文件。

File.WriteAllBytes(@"C:\Temp\" + SelectedAttachment.FileName + SelectedAttachment.FileType, SelectedAttachment.FileBlob);

                //open the file for viewing
                var attachmentProcess = System.Diagnostics.Process.Start(@"C:\Temp\" + SelectedAttachment.FileName + SelectedAttachment.FileType);
                attachmentProcess.WaitForExit();


                //Delete temp file after user closes the file
                File.Delete(@"C:\Temp\" + SelectedAttachment.FileName + SelectedAttachment.FileType);

attachmentProcess.WaitForExit();打开 .jpeg 时抛出 'System.NullReferenceException' 但未在用户代码错误中处理。无论错误如何,文件都会打开,但在关闭文件时不会删除。

我试过使用

using (Image image = Image.FromStream(new MemoryStream(SelectedAttachment.FileBlob)))
                {
                    image.Save("output.jpg", ImageFormat.Jpeg);  
                }

但我收到一条错误消息,指出“'Image': using 语句中使用的类型必须隐式转换为 'System.IDisposable'

有没有办法让 .jpeg 文件进程的行为类似于 word 或 excel 文件,或者我应该使用 MemoryStream 路由,如果是这样,我在那里做错了什么?

您正在使用该方法的 static version of the Process.Start method and passing in a file name (which since it is an image, I'm guessing it is being treated like a url and opening in the web browser via file:///your-file-path/file-name). This actually returns null rather than a process, hence your error. You should instead pass in the name of a program (e.g. your web browser) and the filename as a parameter (using this 版本)。

否则,请考虑创建一个进程对象(通过 new 关键字,可能包含在 using 语句中)并使用给定的 StartInfo 属性调用该实例的 start 方法。这将确保您有一个等待退出的实际进程对象。