將文件保存到資料庫
『壹』 想把文件存入資料庫怎麼辦
資料庫是不會存儲文件的,他只是存儲文件的存放地址,比如你想存儲一個文件,你可以把文件名,文件大小,文件格式,文件存儲的地址(d:/file/fiel.txt)存到資料庫表中。
當你想獲取文件的時候就直接讀取文件的存儲地址File file=new File("d:/file/fiel.txt");,這樣就能存儲數據文件了
『貳』 怎樣把文本文檔里存儲的數據存到資料庫
將帶有格式的文本保存到資料庫中的方法/步驟:
1、在jsp中,頁面的帶有格式的文本內容外面用一個大的標簽,給定表簽名。
2、頁面做提交的時候用上面的表簽名點innerHTML的方式來獲取頁面帶有標簽和樣式的內容。
3、將上面取得的內容作為一個字元串保存到資料庫即可,下次把資料庫里的內容直接輸出到頁面就可以了。
對於要輸出到word里保存樣式的方法也是類似的,只是需要去看一下word解析文本的方式與jsp有何區別,在輸出到word的時候做一下變換即可。
『叄』 用xp.cn把文件放進資料庫怎麼弄
有2種方式:一種是將文件名稱保存到資料庫中,文件保存到伺服器指定位置;另一種就是將文件直接保存到資料庫中。
資料庫,簡而言之可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的數據運行新增、截取、更新、刪除等操作。
『肆』 如何把文件存放在mysql資料庫中
在my.ini文件里可以設定數據文件的存放路徑將其從原來的目錄移動到指定的位置;修改配置文件my.ini,也就是把socket和data的目錄改到你移到的位置
『伍』 如何將Word文檔存入資料庫中
可以通過流將word轉化為二進制數據,然後存入,選擇使用一種動態語言即可輕松完成.
但是,由於此類文件較大,數據讀取和寫入都將非常緩慢,所以不提倡這樣.
建議使用圖片和文檔的路徑保存在資料庫中.
『陸』 請教如何將文件存儲到資料庫中
將文件保存到資料庫中,實際上是將文件轉換成二進制流後,將二進制流保存到資料庫相應的欄位中。在SQL Server中該欄位的數據類型是Image,在Access中該欄位的數據類型是OLE對象。 //保存文件到SQL Server資料庫中 FileInfo fi=new FileInfo(fileName); FileStream fs=fi.OpenRead(); byte[] bytes=new byte[fs.Length]; fs.Read(bytes,0,Convert.ToInt32(fs.Length)); SqlCommand cm=new SqlCommand(); cm.Connection=cn; cm.CommandType=CommandType.Text; if(cn.State==0) cn.Open(); cm.CommandText="insert into "+tableName+"("+fieldName+") values(@file)"; SqlParameter spFile=new SqlParameter("@file",SqlDbType.Image); spFile.Value=bytes; cm.Parameters.Add(spFile); cm.ExecuteNonQuery() //保存文件到Access資料庫中 FileInfo fi=new FileInfo(fileName); FileStream fs=fi.OpenRead(); byte[] bytes=new byte[fs.Length]; fs.Read(bytes,0,Convert.ToInt32(fs.Length)); OleDbCommand cm=new OleDbCommand();
『柒』 我想把一個word文檔存到資料庫裡面,應該怎樣做
最笨的辦法:將word文件算作二進制文件,經由過程攫取二進制文件的方法寫入文件流,再將文件流數據寫入資料庫的二進制欄位中,反之,將資料庫中數據讀出再寫入二進制文件。
『捌』 如何將大文件寫入到資料庫中
最近利用空閑時間自己在寫一個文件備份工具,因為我磁碟上的很多文件很重要,例如很多PPT和講義。所以需要經常備份,而且因為這些文件很多,所以需要增量備份。
我嘗試用過windows自帶的ntbackup工具,但感覺不是很爽。它不支持壓縮備份,而且界面也有點復雜。
為了響應偉大領袖的「自力更生,豐衣足食」的號召,咱決定自己寫一個工具,專門備份到資料庫。支持壓縮,支持加密,支持增量。
本文分享一下其中一些重點的技術細節
其中一個關鍵的技術就是將文件使用二進制的方式存放在資料庫的varbinary(max)的欄位中。該欄位最大允許的長度為2GB。
對於一些小文件,我們可以一次性讀取它的所有位元組,然後一次提交到資料庫
///
<summary>
///
這個方法演示了如何一次提交所有的位元組。這樣導致的結果是:應用程序立即需要申請等同於文件大小的內存
///
</summary>
static
void
SubmitFileByOnce()
{
string
file
=
@"F:功夫熊貓.rmvb";//文件大小為519MB
byte[]
buffer
=
File.ReadAllBytes(file);
using
(SqlConnection
conn
=
new
SqlConnection("server=(local);database=demo;integrated
security=true"))
{
using
(SqlCommand
cmd
=
conn.CreateCommand())
{
cmd.CommandText
=
"INSERT
INTO
Files(FileName,FileContents)
VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new
SqlParameter("@fileName",file),
new
SqlParameter("@fileContents",buffer)
});
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
但是,上面的方法有幾個問題,主要體現在如果文件比較大的話
1.
它需要一次性很大的內存,具體數據等同於文件大小。因為File.ReadAllBytes方法是將所有位元組全部讀入到內存。
2.
它會導致提交失敗,就是因為數據太大了。資料庫也會拒絕。
那麼,我就對這個方法做了一下改進,將文件拆分為5MB一段,也就是說,此時每次申請的內存只有5MB。這就大大地提高了可用性。
///
<summary>
///
這個方法是將文件切分為5MB的塊,每次只是提交5MB,所以可能多次提交,但內存佔用就比較小
///
</summary>
static
void
SubmitFileStepByStep()
{
string
file
=
@"F:功夫熊貓.rmvb";//以這個文件為例,大小為519MB,一共需要的時間大約94秒。還是有點慢的,所以還可能需要進行壓縮
FileStream
fs
=
new
FileStream(file,
FileMode.Open);
byte[]
buffer
=
new
byte[5
*
1024
*
1024];
int
readCount;
using
(SqlConnection
conn
=
new
SqlConnection("server=(local);database=demo;integrated
security=true"))
{
conn.Open();
while
((readCount
=
fs.Read(buffer,
0,
buffer.Length))
>
0)
{
using
(SqlCommand
cmd
=
conn.CreateCommand())
{
cmd.CommandText
=
"INSERT
INTO
Files(FileName,FileContents)
VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new
SqlParameter("@fileName",file),
new
SqlParameter("@fileContents",buffer)
});
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
}
這樣的話,有一個後果就是一個文件,可能在資料庫中會有多條記錄。所以在讀取的時候,我們需要對其進行合並
static
void
DownloadFile()
{
string
file
=
@"F:功夫熊貓.rmvb";
string
destfile
=
@"E:TempTemp.wmv";
using
(SqlConnection
conn
=
new
SqlConnection("server=(local);database=demo;integrated
security=true"))
{
using
(SqlCommand
cmd
=
conn.CreateCommand())
{
cmd.CommandText
=
"SELECT
FileContents
FROM
Files
WHERE
FileName=@fileName";
cmd.Parameters.AddRange(
new[]
{
new
SqlParameter("@fileName",file),
});
conn.Open();
SqlDataReader
reader
=
cmd.ExecuteReader();
FileStream
fs
=
new
FileStream(destfile,
FileMode.Append,
FileAccess.Write);
while
(reader.Read())
{
byte[]
buffer
=
(byte[])reader[0];
fs.Write(buffer,
0,
buffer.Length);
}
fs.Close();
reader.Close();
conn.Close();
}
}
}
本文由作者:陳希章