有文本文件需要上传到服务器,因为不能在服务器上保存文件.所以将文本文件转换为二进制保存在数据库SQLServer表字段里.然后在从表字段里读数据.问题出来了:
我所了解的是读二进制数据必须先转换成文件原来的格式,然后再去读生成的文件.
但现在在服务器上根本就不允许生成任何文件,这个是限制死的了.如果不将二进制数据转换成文件原来的格式,则只能一个字节一个字节的去读,但我这个文本文件是有一定格式的数据,我需要这个格式来分析数据.一个字节一个字节的读能满足分析数据的要求吗?怎么办?请各位帮帮忙,很急.谢谢!

解决方案 »

  1.   

    没招,二进制与文本没有任何的关系。
    一个二进制流,有可能是一个图片,或者一个exe文件。
      

  2.   

    服务器上不让创建文件,你可以在客户端把二进制文件放到系统的tmp目录里分析嘛!
    再说在服务器上建文件你也不方便分析
      

  3.   

    yan63(silence like a cancer grows) 
    说的不错.
      

  4.   

    yan63(silence like a cancer grows) 你说的同时保存客户端文件名和文件字节流是什么意思?能具体说说吗?
    我这个是Web程序,客户端要传本地文件,但不能在服务器上保存文件.所以只能上传的时候作为二进制来保存在数据库表字段里,然后在去读这个字段.
      

  5.   

    http://community.csdn.net/Expert/topic/5194/5194345.xml?temp=4.846454E-04
      

  6.   

    文件在内存里生成啊, 得到二进制数组bytes后, Context.Response.BinaryWrite(bytes);
      

  7.   

    yan63(silence like a cancer grows) 你说
    上传后文件保存为服务器的内存中字节流,可以将该字节流直接写入数据库
    这个怎么用代码实现?
    谢谢!
      

  8.   

    uploadFile.PostedFile.InputStream是Stream类型,
    将Stream写入库的代码网上有很多
      

  9.   

    yan63(silence like a cancer grows) ( ===
    uploadFile.PostedFile.InputStream是Stream类型,
    将Stream写入库的代码网上有很多
    ==============就算写进去了,如果读的话,也是要先还原成文件后,才能去读.
    但我在服务器上不能生成文件,通俗点是在客户端上传的文件不在服务器落地.怎么办?  
     
      

  10.   

    请yan63(silence like a cancer grows)帮帮忙,谢谢!
      

  11.   

    不好意思,耽搁了
    试一下下面的代码
                using (SqlConnection conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ImageTest;Data Source=(local)"))
                {
                    conn.Open();
                    SqlCommand comm = conn.CreateCommand();
                    comm.CommandText = "select * from Images where EmployeeID = 1";
                    comm.CommandType = CommandType.Text;                SqlDataReader reader = comm.ExecuteReader();
                    while (reader.Read())
                    {
                        Response.ContentType = "text/txt";
                        byte[] txtArray = (byte[])reader["image"];
                        Response.BinaryWrite(txtArray);
                    }
                    Response.End();
                }
    -------------------
    发现如下问题
    文本内容中发现无效字符。处理资源 'http://localhost/testapp/Default.aspx' 时出错。 将页面另存后,发现字符流已经输出,不知道为什么报这样的错误,只好贴出来请大家看看,在下先谢过,真是对不住lz
      

  12.   

    忘了入库的测试代码:
            Stream fs = upFile.PostedFile.InputStream;
            byte[] content = new byte[fs.Length];
            fs.Read(content, 0, content.Length);
            fs.Close();
            using (SqlConnection conn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ImageTest;Data Source=(local)")
            {
                conn.Open();            SqlCommand comm = conn.CreateCommand();
                comm.CommandText = "insert into Images(Image, contentType) values(@image, @contentType)";
                comm.CommandType = CommandType.Text;
                comm.Parameters.Add("@image", SqlDbType.Image).Value = content;
                comm.Parameters.Add("@contentType", SqlDbType.NVarChar).Value = "text/txt";            if (comm.ExecuteNonQuery() == 1)
                {
                    Response.Write("Done");
                }
                else
                {
                    Response.Write("err!");
                }
            }
      

  13.   

    yan63(silence like a cancer grows)你提供的代码可以存入数据库.
    但我现在要分析,而不是生成一个文本文件.
    如:
     Response.ContentType = "text/txt";
     byte[] txtArray = (byte[])reader["image"];
     Response.BinaryWrite(txtArray);
    也就是说,我获取数据库存储的文件流字段后,开始分析,因为文本内容是按照一定格式(格式是我知道的)排列的
    如:
       A|A1|A2|A3
       B|B1|B2|B3
       C|C1|C2|C3
       ....
    我现在就是开始分析这些数据,那该怎么做呢?
      

  14.   

    这样子的话,将byte[]->string再进行分析可能会省力不少,但是这里就需要文件初始的编码格式,然后才能进行转换。
      

  15.   

    yan63(silence like a cancer grows) 很感谢你的帮助.你说将byte[]->string再进行分析可能会省力不少,但是这里就需要文件初始的编码格式,然后才能进行转换.具体怎么做呢?
      

  16.   

    如果只是上传文本文件进行分析而与其他类型文件无关的话,建议在入库的时候就已字符串的形式入库,这样可以通过数据库对字符进行操作了,

    Stream fs = upFile.PostedFile.InputStream;
    byte[] content = new byte[fs.Length];
    fs.Read(content, 0, content.Length);
    fs.Close();// 在这里必须确认客户端的文本编码格式,
    // 我们需要再看一下是否有对各种编码自适应的转换做法
    Encoding gb = Encoding.GetEncoding("gb2312");//根据汉字编码的字节数组解码出中文汉字 
    string str1 = gb.GetString(content);
    // 将str1入库
    ...
      

  17.   

    我明白了,谢谢yan63(silence like a cancer grows) !