zoukankan      html  css  js  c++  java
  • C#将文件转成16进制码流写入数据库存起来,访问的时候再还原成PDF文件。

    转自https://blog.csdn.net/liubowei_0312/article/details/53378146

    适合将文件写入数据库,远程访问的时候还原
    1.首先把文件转成十六进制文件流
    public void FileToStream()
    {
    try
    {
    IPdfClassBll pdfClassBll = DataFactory.GetPdfClass();
    FileStream fs = new FileStream(@"文件路径/***.PDF", FileMode.Open);
    BinaryReader br = new BinaryReader(fs);
    Byte[] byData = br.ReadBytes((int)fs.Length);
    StringBuilder strResult = new StringBuilder(byData.Length * 8);
    string binary = byteToHexStr(byData);
    PdfInfo pdfinfo = new PdfInfo();
    pdfinfo.PRTNUM = "PH001";//创建的新文件名
    pdfinfo.PDFREPORT = binary;
    pdfClassBll.Add(pdfinfo);
    fs.Close();
    br.Close();
    }
    catch (Exception ex)
    {
    MessageBox.Show("文件写入失败~!");
    }
    }

    /// <summary>
    /// 字节数组转16进制字符串
    /// </summary>
    /// <param name="bytes"></param>
    /// <returns></returns>
    public static string byteToHexStr(byte[] bytes)
    {
    string returnStr = "";
    if (bytes != null)
    {
    for (int i = 0; i < bytes.Length; i++)
    {
    returnStr += bytes[i].ToString("X2");
    }
    }
    return returnStr;
    }

    2.读取数据库中的 PDF流 信息,并写入文件
    =======================

    public void StreamToFile(string prtnum)
    {
    try
    {
    //写入位置
    SampleConfig config = MonitorConfigManager.GetInstance().GetSampleConfig();
    string reportPath = config.ReportPath;
    reportPath = reportPath + "\" + oSampleInfo.PRTNUM + ".pdf";
    IPdfClassBll pdfClassBll = DataFactory.GetPdfClass();
    PdfInfo pdfInfo = pdfClassBll.GetPdfReportByPRTNUM(prtnum);
    string strPdf = pdfInfo.PDFREPORT;
    byte[] bytes = strToToHexByte(strPdf);
    FileStream fileStream = new FileStream(reportPath, FileMode.OpenOrCreate, FileAccess.Write);
    fileStream.Write(bytes, 0, bytes.Length);
    BinaryWriter binaryWriter = new BinaryWriter(fileStream);
    binaryWriter.Write(bytes);
    binaryWriter.Close();
    fileStream.Close();
    }
    catch (Exception ex)
    {

    }
    }
    /// <summary>
    /// 16进制字符串转为文字
    /// </summary>
    /// <param name="hexString"></param>
    /// <returns></returns>
    private static byte[] strToToHexByte(string hexString)
    {
    hexString = hexString.Replace(" ", "");
    if ((hexString.Length % 2) != 0)
    hexString += " ";
    byte[] returnBytes = new byte[hexString.Length / 2];
    for (int i = 0; i < returnBytes.Length; i++)
    returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);

    return returnBytes;
    }

  • 相关阅读:
    关于苹果IPhone/Ipad(IOS)开发者证书申请及安装、真机调试、发布的参考文章
    vs 关闭警告
    真机测试及布署Code Sign error问题总结
    在 Win32 Application 和 Win32 Console Application 中使用 MFC
    获取应用程序路径的区别
    js日期控件
    SQL SERVER 企业管理器 MMC 无法创建管理单元
    进程查看两利器
    用PowerDesigner逆向数据库工程时”Unable to list the table"错误的解决方法
    SQL 附加无日志数据库
  • 原文地址:https://www.cnblogs.com/lidaying5/p/10898391.html
Copyright © 2011-2022 走看看