将文件上传数据库,二进制拆开, 再合并保存
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 "保存成功";
}