最近專案中遇到新問題,問題描述如下:
1)需求:應用後台每天定時讀取本地伺服器上傳的excel**,並進行解析。
2)背景:因為生產上部署兩台應用伺服器(負載均衡),excel放在nfs共享目錄中,這樣兩台伺服器都能讀取excel。為了防止excel被讀取兩次,所以**中每次讀完會加鎖,乙個應用讀完了,另乙個就不會再讀了。
3)問題:客戶說不能搭建nfs,只能應用各自去讀本地目錄。
4)方案: 現有3種方案。 方案1:操作員分別上傳excel到兩台伺服器指定目錄上。但這樣會使操作員每次傳兩個,有點麻煩 方案2:操作員僅上傳乙個目錄,然後rsync自動同步。 方案3:excel放到指定目錄,然後執行一段**,把檔案流儲存到資料庫中。 下面著重講下方案3.
1. 首先,資料庫建表
create table tb_excel(
id int primary key auto_increment,
name varchar(8),
excel longblob
);
2. 建立物件
3. excel轉成byte,並匯入資料庫
exceldao exceldao = new exceldao();
inputstream inputstream = getinputstreamfromfile(inputfilepath);
//input流轉成位元組陣列
byte inputbytes = tobytearray(inputstream);
//位元組陣列存入db
exceldao.add(new tbexcel(1, "julia", inputbytes));
public static inputstream getinputstreamfromfile(string inputfilepath) throws exception
public static byte tobytearray(inputstream input) throws ioexception
return output.tobytearray();
}
4. 以上已經完成excel的儲存,此時資料庫相當於乙個nfs共享空間了。後面應用如果想解析excel的話,就可以從資料庫中取出byte,並轉成excel了。
//從資料庫取出位元組陣列並轉成excel匯出
byte outputbytes = exceldao.select(1);
//位元組陣列轉input流
inputstream inputstream1 = new bytearrayinputstream(outputbytes);
outputfilefrominputstream(inputstream1, outputfilepath);
public static void outputfilefrominputstream(inputstream inputstream, string outputfilepath) throws ioexception
} catch (ioexception e1) finally
}
完成了。 **詳見
參考了好幾個帖子,找不到了,侵刪啊,不好意思。
檔案儲存到資料庫中
最近開發乙個專案,涉及到將檔案儲存到資料庫中,在網上找到了例程,故貼出來,大家共享。下面介紹一下使用c 來完成此項任務。首先,介紹一下儲存檔案到資料庫中。將檔案儲存到資料庫中,實際上是將檔案轉換成二進位製流後,將二進位製流儲存到資料庫相應的字段中。在sql server中該字段的資料型別是image...
將檔案儲存到資料庫中 stream
在程式設計中我們常常會遇到 將檔案儲存到資料庫中 這樣乙個問題,雖然這已不是什麼高難度的問題,但對於一些剛剛開始程式設計的朋友來說可能是有一點困難。其實,方法非常的簡單,只是可能由於這些朋友剛剛開始程式設計不久,一時沒有找到方法而已。下面介紹一下使用c 來完成此項任務。首先,介紹一下儲存檔案到資料庫...
C 將檔案儲存到資料庫中或者從資料庫中讀取檔案
在程式設計中我們常常會遇到 將檔案儲存到資料庫中 這樣乙個問題,雖然這已不是什麼高難度的問題,但對於一些剛剛開始程式設計的朋友來說可能是有一點困難。其實,方法非常的簡單,只是可能由於這些朋友剛剛開始程式設計不久,一時沒有找到方法而已。下面介紹一下使用c 來完成此項任務。首先,介紹一下儲存檔案到資料庫...