C# 将文件上传数据库,二进制拆开, 再合并保存

 将文件上传数据库,二进制拆开, 再合并保存

  string fName = "";
        string filePath = "";
        string Ext; 

private void Button1_Click(object sender, EventArgs e)//打开文件
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.InitialDirectory = "c:\\";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.FilterIndex = 1;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {

                fName = openFileDialog.SafeFileName;
                filePath = openFileDialog.FileName.ToString();
                Ext = System.IO.Path.GetExtension(fName);//
                Ext = Ext.ToLower();


            }
        }

        private void Button2_Click(object sender, EventArgs e)//上传
        {
            string connstr = "XXXX ";
            FileStream byteStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(byteStream);
            Byte[] byteFile = br.ReadBytes((int)byteStream.Length);
            fName = fName.Substring(0, fName.IndexOf("."))+ "_" + System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString() + Ext.ToLower();

            SqlParameter[] spAttach = {
                                new SqlParameter("@fldDocNum", "sssssss"),
                                new SqlParameter("@fldKey",1),
                                new SqlParameter("@fldFileName", fName),
                                new SqlParameter("@fldFileNametype","Attach"),
                                new SqlParameter("@fldFileData", byteFile ),
                                };


            SqlHelper.ExecuteNonQuery(connstr, CommandType.StoredProcedure, "Add_Attach", spAttach);

 

            DataTable dt = new DataTable();
            string sql = "SELECT a.* FROM  [tbl_Attachment1] a where fldDocNum='sssssss' and" +
                " fldFileName='" + fName + "' ";
            dt = SqlHelper.ExecuteDataTable(connstr, sql);

            if (dt != null && dt.Rows.Count > 0)
            {
                byte[] strResult = (byte[])dt.Rows[0]["fldFileData"];
                BinaryHelper.FileByteObject(strResult, @"C:\Users\it\Desktop\123\"+ dt.Rows[0]["fldFileName"]);
                MessageBox.Show("OK ");
            }

 


        }

/Button3_Click  SAP接受附件不超过1000byte,所以有时候要把数据库文件拆开成一份一份,这里没有做存在Datatable

只展示从数据库获取二进制后,分拆成多个数组,然后重新组装保存,确保文件可拆可组装

 

private void Button3_Click(object sender, EventArgs e)
        {

string connstr = "XXXXXX;
          System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() + System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString() + System.DateTime.Now.Millisecond.ToString() + Ext.ToLower();
 
            DataTable dt = new DataTable();
            string sql = "SELECT a.* FROM  dbo.[tbl_Attachment1] a where fldDocNum='sssssss' and" +
                " fldFileName='EHF-Notice-2016-033_2019821174511228.pdf' ";
            dt = SqlHelper.ExecuteDataTable(connstr, sql);

             
            if (dt != null && dt.Rows.Count > 0)
            {
                byte[] strResult = (byte[])dt.Rows[0]["fldFileData"];
                int j1=  Convert.ToInt16( Math.Ceiling(  Convert.ToDecimal( strResult.Length / 1000)));
                int k = strResult.Length % 1000;
                byte[] strResult1= new byte[strResult.Length];
                    byte [] array = new byte[strResult.Length];
               
                    int length = array.Length;

                    int count = 0;
                    if (length % 1000 != 0)
                    {
                        count = length / 1000 + 1;
                    }
                    else
                    {
                        count = length / 1000;
                    }
                byte[][] arrays = new byte[count][];
                    for (int i = 0; i < count; i++)
                    {
                        int limit = 1000;
                        if (array.Length - i * 1000 < 1000)
                        {
                            limit = array.Length - i * 1000;
                        }
                        List<byte> newdata = new List<byte>();
                        for (int j = 0; j < limit; j++)
                        {
                            newdata.Add(strResult[1000 * i + j]);
                        }
                        arrays[i] = newdata.ToArray();
               
                    }
                byte[][] arrays1 = arrays;

                List<byte> newdata1 = new List<byte>();
                for (int i = 0; i < count; i++)
                {
                    newdata1.AddRange(arrays1[i]);
                }
                strResult1 = newdata1.ToArray();
                BinaryHelper.FileByteObject(strResult1, @"C:\Users\it\Desktop\123\" + dt.Rows[0]["fldFileName"]);
                MessageBox.Show("OK ");
            }

}

  public   string FileByteObject(byte[] buff, string savePath)
        {
            if (buff == null)
                throw new ArgumentNullException("buff");
            if (savePath == null)
                throw new ArgumentNullException("savePath");
            if (File.Exists(savePath)) return "文件名重复";
            try
            {
                var fs = new FileStream(savePath, FileMode.CreateNew);
                var bw = new BinaryWriter(fs);
                bw.Write(buff, 0, buff.Length);
                bw.Close();
                fs.Close();
            }
            catch (Exception er)
            {
                throw new Exception(er.Message);
            }
            return "保存成功";
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值