有文本文件需要上传到服务器,因为不能在服务器上保存文件.所以将文本文件转换为二进制保存在数据库SQLServer表字段里.然后在从表字段里读数据.问题出来了:
我所了解的是读二进制数据必须先转换成文件原来的格式,然后再去读生成的文件.
但现在在服务器上根本就不允许生成任何文件,这个是限制死的了.如果不将二进制数据转换成文件原来的格式,则只能一个字节一个字节的去读,但我这个文本文件是有一定格式的数据,我需要这个格式来分析数据.一个字节一个字节的读能满足分析数据的要求吗?怎么办?请各位帮帮忙,很急.谢谢!
我所了解的是读二进制数据必须先转换成文件原来的格式,然后再去读生成的文件.
但现在在服务器上根本就不允许生成任何文件,这个是限制死的了.如果不将二进制数据转换成文件原来的格式,则只能一个字节一个字节的去读,但我这个文本文件是有一定格式的数据,我需要这个格式来分析数据.一个字节一个字节的读能满足分析数据的要求吗?怎么办?请各位帮帮忙,很急.谢谢!
一个二进制流,有可能是一个图片,或者一个exe文件。
再说在服务器上建文件你也不方便分析
说的不错.
我这个是Web程序,客户端要传本地文件,但不能在服务器上保存文件.所以只能上传的时候作为二进制来保存在数据库表字段里,然后在去读这个字段.
上传后文件保存为服务器的内存中字节流,可以将该字节流直接写入数据库
这个怎么用代码实现?
谢谢!
将Stream写入库的代码网上有很多
uploadFile.PostedFile.InputStream是Stream类型,
将Stream写入库的代码网上有很多
==============就算写进去了,如果读的话,也是要先还原成文件后,才能去读.
但我在服务器上不能生成文件,通俗点是在客户端上传的文件不在服务器落地.怎么办?
试一下下面的代码
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
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!");
}
}
但我现在要分析,而不是生成一个文本文件.
如:
Response.ContentType = "text/txt";
byte[] txtArray = (byte[])reader["image"];
Response.BinaryWrite(txtArray);
也就是说,我获取数据库存储的文件流字段后,开始分析,因为文本内容是按照一定格式(格式是我知道的)排列的
如:
A|A1|A2|A3
B|B1|B2|B3
C|C1|C2|C3
....
我现在就是开始分析这些数据,那该怎么做呢?
如
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入库
...