1. 程式人生 > >將檔案上傳到資料庫 和 從資料庫下載檔案到本地

將檔案上傳到資料庫 和 從資料庫下載檔案到本地

有時候我們需要把圖片、文件、dll檔案、等等,上傳的資料庫,然後當需要的時候再從資料庫中讀取到本地,下面我以上傳圖片為例,講解一下如何把本地的一張圖片上傳到資料庫,然後再從資料庫下載到本地。

  工具:VS2010,Sql Server 2000。語言:C#。

  像這樣的檔案,我們上傳的時候都是以二進位制的形式操作,在資料庫中對應的資料型別為image,我們只需要把本地檔案轉為二進位制形式,然後以image資料儲存到資料庫就行。

  Sql Server 2000自帶的資料庫Northwind,有一張表Categories,其中有一個欄位Picture為image型別,我們就以它為例,上傳一張圖片到這個表中。

  1 開啟vs2010新建一個專案“Windows窗體應用程式”,在窗體Form1上放置兩個按鈕,分別改變文字為"上傳“ 和 "下載",新增對應的單擊事件。

  2 新建一個類,這個類用來封裝對檔案上傳和下載的功能呼叫,然後我們可以在前面的單擊事件中呼叫這個方法。下面是這個類的完整定義:

複製程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.IO;
using System.Data; namespace test { class UpDownLoad { public string categoryName; //下載時可以再外部指定檔名 private string description; private byte[] picture; public SqlConnection GetConn() //得到連線物件 { SqlConnection conn = new SqlConnection("Data Source =.;Initial Catalog = Northwind;user id = sa;
"); try { conn.Open(); } catch (Exception e) { MessageBox.Show("連線資料庫失敗:{0}", e.Message); conn.Close(); } return conn; } private static string GetFilePath() //通過開啟對話方塊得到檔案路徑 { string filepath = ""; OpenFileDialog openfiledlg = new OpenFileDialog(); if (openfiledlg.ShowDialog() == DialogResult.OK) { filepath = openfiledlg.FileName; } return filepath; } private static Byte[] GetContent(string filepath) //將某路徑下的檔案 轉化為 二進位制程式碼 { FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read); //開啟檔案流 Byte[] byData = new Byte[fs.Length]; //儲存檔案的位元組陣列 fs.Read(byData, 0, byData.Length); //讀取檔案流 fs.Close();//釋放資源 return byData; } public void UpLoad() //上傳 { string filePath = GetFilePath();//得到檔案路徑 FileInfo fi = new FileInfo(filePath);//檔案資訊物件 this.categoryName = fi.Name; //獲取檔名 this.description = "這是我上傳到資料庫的第一張照片"; this.picture = GetContent(filePath);//通過路徑獲取檔案二進位制形式 SqlConnection conn = GetConn(); string sqlstr = string.Format("insert into Categories(CategoryName,Description,Picture) values(@fileName,@descri,@pic)"); SqlCommand comm = new SqlCommand(sqlstr, conn); comm.Parameters.Add("fileName", SqlDbType.VarChar);//新增變數 comm.Parameters["fileName"].Value = this.categoryName; comm.Parameters.AddWithValue("descri", this.description);//新增變數 comm.Parameters.AddWithValue("pic", this.picture); if (comm.ExecuteNonQuery() == 1) { MessageBox.Show("新增一張照片成功。"); } conn.Close();//關閉資料庫 } public void DownLoad() //下載圖片 { if (categoryName == "") { MessageBox.Show("請先對下載的檔案填寫檔名"); return; } SqlConnection conn = GetConn(); string sqlstr = string.Format("select * from Categories where CategoryName = @fileName"); SqlCommand comm = new SqlCommand(sqlstr, conn); comm.Parameters.AddWithValue("@fileName", this.categoryName); SqlDataReader dr = comm.ExecuteReader(); if (dr.HasRows) { if (dr.Read())//讀一行資料 { this.picture = (byte []) dr["Picture"]; FileStream fs = new FileStream(categoryName, FileMode.Create, FileAccess.Write); fs.Write(picture, 0, picture.Length); fs.Close();//一定要關閉,否則不會將流讀入檔案 dr.Close(); conn.Close(); } }//if else { MessageBox.Show("沒有這個檔案"); return; } } } }
複製程式碼

  3 如果這個類的名稱空間與主程式的名稱空間名不同,要在主程式新增引用:using test;

然後在前面的兩個單擊事件中分別新增如下程式碼,

(1)在上傳按鈕對應的button1中先宣告一個物件,然後呼叫:

private void button1_Click(object sender, EventArgs e)
{
            UpDownLoad updown = new UpDownLoad();
            updown.UpLoad();
}

(2)在下載對應的button2中宣告一個物件,然後給要下載的檔案賦值,再呼叫:

複製程式碼
private void button2_Click(object sender, EventArgs e)
{
            UpDownLoad updown = new UpDownLoad() ;
            updown.categoryName = "金河.jpg";//最好是自己剛才上傳的檔案的名字
            updown.DownLoad();
}
複製程式碼

然後在本程式的Debug目錄下面就會出現從資料庫中下載到本地的圖片。

  總結:最初我想把dll檔案上傳到資料庫,然後通過從資料庫下載dll檔案到本地實現程式的自動更新,但是當時下載的時候忘記關閉FileStream物件流,結果下載到的檔案為空,後來又牽涉到很多其他的邏輯問題,後來感覺到很崩潰,不過當我靜下心來將問題簡單化(先實現最簡單的,不牽涉很多邏輯問題功能,然後在通過邏輯來呼叫功能),這樣子下來感覺問題簡單多了。學習的時候切忌浮躁。

相關推薦

檔案資料庫 資料庫下載檔案本地

有時候我們需要把圖片、文件、dll檔案、等等,上傳的資料庫,然後當需要的時候再從資料庫中讀取到本地,下面我以上傳圖片為例,講解一下如何把本地的一張圖片上傳到資料庫,然後再從資料庫下載到本地。   工具:VS2010,Sql Server 2000。語言:C#。   像

fastDFS+LibreOffice多檔案(二)後端部分:檔案資訊轉json字串儲存資料庫(Gsonorg.json兩種方式)

需要注意的地方: 1)如果你複製我的程式碼到你的程式上報錯,可以看看我第一篇文章實體類跟配置檔案的設定:https://blog.csdn.net/qq_36688143/article/details/84162924 第二篇檔案上傳前端頁面的程式碼: https://blog.c

檔案控制元件Fileupload(實現檔案並寫入資料庫

首先我們來說一下Fileupload這個檔案上傳控制元件的幾大敗筆: 1.上傳之後按F5重新整理,重複提交 2.提交以後按後退鍵Fileupload中的資訊還在 3.不支援多檔案上傳 4.上傳前不能檢測檔案大小 解決方法: 1.建立iframe在子頁面實現或者重定向語句(R

java web圖片存到儲資料庫資料庫中讀取圖片(base64)

一、分析一下基本流程    從前臺頁面獲取圖片,後臺接收圖片檔案轉化成資料,然後儲存到資料庫,然後反向輸出到jsp頁面二、分析一下資料轉換和資料流通  三、將圖片儲存到資料庫中     1、jsp頁面將圖片傳到後臺的過程        jsp頁面將圖片通過form表單提交,後

java實現多檔案並儲存到資料庫

好久沒有寫部落格了,今天專案裡需要一個功能,即前臺實現多圖片上傳列表,並後臺儲存到mysql中。前臺後臺一起弄,用了半天時間終於搞定了。 實現:前臺Layui實現;後臺servlet+hibernate 不多廢話,先上圖 前臺實現主要是用的layui框架,框架本

29. Spring boot 檔案(多檔案)【零開始學Spring Boot】

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

Spring boot 檔案(多檔案)【零開始學Spring Boot】

檔案上傳主要分以下幾個步驟: (1)新建maven java project; (2)在pom.xml加入相應依賴; (3)新建一個表單頁面(這裡使用thymeleaf); (4)編寫controller; (5)測試; (6)對上傳的檔案做一些限制; (7)多檔案上傳

用Java實現簡單的檔案伺服器客戶端

/** * 使用TCP協議實現上傳功能的伺服器端 * 思路: * 新建ServerSocket * 等待客戶端連線 * 連線上後開啟子執行緒,把連接獲取的Socket傳給子執行緒 * 迴圈進行 * @author yajun * */ public class UploadServer {

Springmvc檔案(servlet3.0)/下載(ssm)以及坑點

以前在servlet上寫過檔案上傳和檔案下載,最近由於需求需要集合到ssm中,有些坑點以前都忘記了。 檔案上傳:檔案上傳首先要在xml中配置上傳資訊,ssm有強大的過濾功能,你不宣告讓某種型別進來他是進不來的,我是用的是servlet3.0的part上傳檔案,

檔案-佇列多執行緒讀取檔案內容

佇列多執行緒讀取檔案內容 為什麼採用多執行緒佇列的方式呢?主要是如果檔案一行一行讀取處理的話,頁面上傳檔案後,需要等待伺服器響應。如果檔案的內容資料量很大的話,頁面就一直等待伺服器響應,畢竟伺服器處理這些資料是花費很多時間的,我們都知道,頁面是有響應時間的,一旦響應超時了

input file選擇檔案後清空選擇框檔案資訊兩種解決方案

上傳檔案時,選擇了檔案後想清空檔案路徑。用兩種方法解決  <input type="file" id="fileupload" name="file" /> 第一種: var obj =

Android中自定義MultipartEntity實現檔案以及使用Volley庫實現檔案

最近在參加CSDN部落格之星,希望大家給投一票,謝謝啦~                       點這裡投我一票吧~前言在開發當中,我們常常需要實現檔案上傳,比較常見的就是圖片上傳,比如修改個頭像什麼的。但是這個功能在Android和iOS中都沒有預設的實現類,對於And

檔案時只接收指定的檔案型別

Valid Accept Types: For CSV files (.csv), use:  <inputtype="file"accept=".csv"/> For Excel Files 2003-2007 (.xls), use:  <in

使用java的MultipartFile實現layui官網檔案實現全部示例,java檔案

layui(諧音:類UI) 是一款採用自身模組規範編寫的前端 UI 框架,遵循原生 HTML/CSS/JS 的書寫與組織形式,門檻極低,拿來即用。 layui檔案上傳示例地址:https://www.layui.com/demo/upload.html 本次教程是基於springboot2.0的。 測試

ASP.NET Core WEB API 使用element-ui檔案元件el-upload執行手動檔案檔案,並在檔案後清空檔案

前言:   從開始學習Vue到使用element-ui-admin已經有將近快兩年的時間了,在之前的開發中使用element-ui上傳元件el-upload都是直接使用檔案選取後立即選擇上傳,今天剛好做了一個和之前類似的檔案選擇上傳的需求,不過這次是需要手動點選按鈕把檔案上傳到伺服器中進行資料匯入,而且最多隻

javaweb專案檔案資料庫中的大小限制

首先將struts.xml中新增上配置 <!-- 配置檔案上傳大小 --><constant name="struts.multipart.maxSize" value="671088640"></constant>64M 然後上傳大檔案出現: Struts Prob

springmvcservlet下的檔案下載(存檔案目錄資料庫Blob兩種方式)

專案中涉及了檔案的上傳和下載,以前在struts2下做過,今天又用springmvc做了一遍,發現springmvc封裝的特別好,基本不用幾行程式碼就完成了,下面把程式碼貼出來: FileUpAndDown.jsp <%@ page language="java"

C#檔案下載(以二進位制流儲存到資料庫

1、將檔案以二進位制流的格式寫入資料庫 首先獲得檔案路徑,然後將檔案以二進位制讀出儲存在一個二進位制陣列中,與資料庫建立連線,在SQL語句中將二進位制陣列賦值給相應的引數,完成向資料庫中寫入檔案的操作 /// 將檔案流寫入資料庫 /// </s

MultipartFilecsvexcel檔案儲存到資料庫

springMVC中MultipartFile接收檔案: 匯入CSV檔案:csv->json->list<類> public List<T> readCsv(MultipartFile file){ Lis

Java檔案資料庫(並儲存本地)、word轉pdf並進行頁面預覽

對於頁面預覽用到了OpenOffice附件: 官方的下載地址:Apache OpenOffice 選擇windows版本安裝完成後,在cmd中執行下面兩個命令,檢視工作管理員中是否有soffice.bin的程序。(用到OpenOffice,必須保證工作管理員中有