asp.net上传图片所遇到的问题

最近做上传图片功能时,遇到的一些问题,在这里记录一下,以便备忘

1.关于数据压缩的问题(压缩后byte[]数组的长度反而更大)

因为图片和网站是分开的,我这里上传图片用的是webservice,为了能够减少数据传输量,同时使用了数据解压缩,代码如下:

数据解压缩帮助类

 1 public class DataCompressor
 2     {
 3         /// <summary>
 4         /// 压缩
 5         /// </summary>
 6         /// <param name="decompressedData"></param>
 7         /// <returns></returns>
 8         public static byte[] Compress(byte[] decompressedData)
 9         {
10             using (MemoryStream stream = new MemoryStream())
11             {
12                 DeflateStream stream3 = new DeflateStream(stream, CompressionMode.Compress, true);
13                 stream3.Write(decompressedData, 0, decompressedData.Length);
14                 stream3.Close();
15                 return stream.ToArray();
16             }
17         }
18         /// <summary>
19         /// 解压缩
20         /// </summary>
21         /// <param name="compressedData"></param>
22         /// <returns></returns>
23         public static byte[] Decompress(byte[] compressedData)
24         {
25             using (MemoryStream stream = new MemoryStream(compressedData))
26             {
27                 using (DeflateStream stream3 = new DeflateStream(stream, CompressionMode.Decompress))
28                 {
29                     return LoadToBuffer(stream3);
30                 }
31             }
32         }
33 
34         private static byte[] LoadToBuffer(Stream stream)
35         {
36             using (MemoryStream stream2 = new MemoryStream())
37             {
38                 int num;
39                 byte[] buffer = new byte[0x400];
40                 while ((num = stream.Read(buffer, 0, buffer.Length)) > 0)
41                 {
42                     stream2.Write(buffer, 0, num);
43                 }
44                 return stream2.ToArray();
45             }
46         }
View Code

后来我想可能这只对于压缩数据量大的才会有明显效果,谁知道的,希望能解释一下。

2.关于HttpPostedFile.InputStream.Read()方法

遇到这个问题是因为我做图片上传的功能时,考虑到用户上传图片的正确性和安全性,把HttpPostedFile对象传给了一个验证文件内容是否真的图片,代码如下:

 1 /// <summary>
 2         /// 上传前的图片是否可靠
 3         /// </summary>
 4         public static bool IsSecureUploadPhoto(byte[] data)
 5         {
 6             FileExtension[] fe = { FileExtension.BMP, FileExtension.GIF, FileExtension.JPG, FileExtension.PNG };
 7 
 8             if (IsAllowedExtension(data, fe))
 9                 return true;
10             else
11                 return false;
12         }
View Code
 1 public static bool IsAllowedExtension(byte[] data, FileExtension[] fileEx)
 2         {
 3             MemoryStream ms = new MemoryStream(data);
 4             System.IO.BinaryReader br = new System.IO.BinaryReader(ms);
 5             string fileclass = "";
 6             byte buffer;
 7             try
 8             {
 9                 buffer = br.ReadByte();
10                 fileclass = buffer.ToString();
11                 buffer = br.ReadByte();
12                 fileclass += buffer.ToString();
13             }
14             catch { }
15             br.Close();
16             ms.Close();
17             foreach (FileExtension fe in fileEx)
18             {
19                 if (Int32.Parse(fileclass) == (int)fe) return true;
20             }
21             return false;
22         }
View Code

上面代码是我改过的,方法的参数开始我传的是HttpPostedFile对象,后来改成了byte[]参数

在这个方法中已经读取了一次,在接下来调用webservice的上传方法,又使用了HttpPostedFile.InputStream.Read()方法,因为第二次就读取不到数据,所以就读取一次,直接传byte[]数组。

总结:

通过InputStream.Read()方法把当前流读取到字节序列后,InputStream流数据就不能二次使用了,这个过程相当于移动的过程,而不是复制。看来我得补充一下C#的IO知识。

。。。。第一次写博客,问题表达不清楚,多多指教啊,继续努力,还能进步。

转载于:https://www.cnblogs.com/hyxh/archive/2013/06/15/3137628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值