2012-01-07 68 views
0

我有一个asp.net mvc应用程序,允许上传图片。我想知道做什么是最好的方法。保存图像的最佳方法?

现在我有这个

HttpPostedFileBase uploadedImg = Session[SessionImgKey] as HttpPostedFileBase; 

if (uploadedImg != null) 
{ 
    string fileName = CreateFile(MyField.Name, uploadedImg); 
    tableA.ImagePath = String.Concat(ImgFolderPathLoctaion, "\\", fileName); 
} 

这是不错,但我想将它移到我的服务层,我不希望在导入web.dll有到我的业务层项目。

所以我应该使用流?或类似Image Save(我认为这可能更适合通过绘图类而不是图像上传的图像

+2

为什么上传的文件存储在会话中? – alexn 2012-01-07 23:24:31

+0

我有一个jQuery的形式向导由ajax发布(使用序列化)。由于用ajax发布文件是不可能的(不使用iframe或html5)。我不得不使用plupload,因此他们必须点击上传按钮才能将它存储在会话中,并且当他们提交整个表单时,我会将其从会话中删除。 – chobo2 2012-01-07 23:48:01

回答

1

您可以从发布的文件中获取图像流,将其转换为图像(System.Drawing)并保存:

var stream = uploadedImg.InputStream; 
var buffer = new byte[stream.Length]; 
stream.Read(buffer, 0, buffer.Length); 
//convert stream into image 
Image myImage = Image.FromStream(new MemoryStream(buffer)); 
myImage.Save("c:\myimage.jpg"); 
+0

这比使用流读写器并写入字节更好吗? – chobo2 2012-01-07 23:49:02

+0

HttpPostedFileBase的InputStream属性为您提供上传文件的流,因此您不需要流读取器,图像的Save方法在文件上写入缓冲图像的内容,同样的事情是通过流完成的作家。结果是一样的。 – 2012-01-07 23:54:26

+0

我是否应该使用上传的相同文件扩展名,或者您认为我应该强制执行一个标准(例如将所有内容保存为JPG格式) – chobo2 2012-01-08 01:28:38

0

如果您需要将文件传递到服务层,请使用HttpPostedFileBase的InputStream属性传递流。通过这种方式,您的服务层不知道您的网页/表示层。

+0

这是我会做的,但我不确定将它写入服务器的最佳方式是什么?使用流读取器和写入器? – chobo2 2012-01-07 23:46:06