.net实现附件上传的用户控件

  由于项目中有很多地方要上传图片、文件什么的,所以就开发了一个用户控件,用来专名处理上船的问题,避免代码的重复性.用了委托技术,调这个方法,只要初始化这个用户空间就ok了,代码如下:

public  delegate bool SaveUpload();
        private DataTable dtDoc;
        private DataTable dtAttachments;
        private DataSet dsDoc;
        private PyllotUpload frmUploadControl;
        private string jobId = "";
        private string customer = "";
        private string sourceId = "";
        private docType docTypes;
        public SaveUpload saveUpload;

        //判断是否是新增
        private bool isNew;

        //文件管理进去的,就不需要保存文件表,让外层自己保存
        private bool isDocManagement;

 

//下面方法是用来初始化用户控件的,主要把外层的用户控件实例传进来,我们附件是挂在一个个文件下的.

        public void Init(PyllotUpload pUpload, string jobId, string customer, string sourceId, docType sourceDocType)
        {
            this.frmUploadControl = pUpload;
            this.jobId = jobId;
            this.customer = customer;
            this.sourceId = sourceId;
            this.docTypes = sourceDocType;

            frmUploadControl.GrdAttachments.DataSource = this.dtAttachments;
            frmUploadControl.BtnAttach.Click += new EventHandler(BtnAttach_Click);
            frmUploadControl.BtnDownload.Click += new EventHandler(BtnDownload_Click);
            frmUploadControl.BtnRemove.Click += new EventHandler(BtnRemove_Click);
            saveUpload = new SaveUpload(Save);
            this.frmUploadControl.GrdAttachments.DoubleClick += new EventHandler(GrdAttachments_DoubleClick);

            //加载数据
            this.EditBySourceId(sourceId);

            //绑定datasource
            BindAllFields();
        }


        /// <summary>
        /// 绑定datasource
        /// </summary>
        private void BindAllFields()
        {
            //将数据绑定到编辑控件
            UIFacade.BindFields(this.frmUploadControl, this.dsDoc);
            UIFacade.BindFields(this.frmUploadControl, this.dtDoc);
            UIFacade.BindFields(this.frmUploadControl, this.dtAttachments);

            this.frmUploadControl.GrdAttachments.DataSource = dtAttachments;
        }


        /// <summary>
        /// 用于文件管理界面得到附件表
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public void LoadDataSet(DataSet ds, PyllotUpload pUpload)
        {
            this.dsDoc = ds;
            this.dtDoc = this.dsDoc.Tables["DM_MANAGEMENT"];
            this.dtAttachments = this.dsDoc.Tables["DM_MANAGEMENT_ATTACHMENTS"];
            isDocManagement = true;

            //绑定datasource
            BindAllFields();
        }

        /// <summary>
        /// 用于 如海出仓储新建数据
        /// </summary>
        /// <param name="jobId"></param>
        /// <param name="sourceId"></param>
        /// <param name="sourceType"></param>
        /// <returns></returns>
        public void NewDataSet()
        {
            string strDocType = this.docTypes.ToString();
            string jobIdLast = "";
            if (this.jobId != null)
            {
                jobIdLast = this.jobId;
            }

            this.dsDoc = (System.Data.DataSet)UIFacade.Submit("DOCATTACHMENTS_EDITBYDOCID", new object[] { jobIdLast, this.customer.ToString(), sourceId.ToString(), strDocType });
            this.dtDoc = this.dsDoc.Tables["DM_MANAGEMENT"];
            this.dtAttachments = this.dsDoc.Tables["DM_MANAGEMENT_ATTACHMENTS"];
            isDocManagement = false;

            //绑定datasource
            BindAllFields();
        }

        /// <summary>
        /// 用于 如海出仓储编辑数据
        /// </summary>
        /// <param name="pUpload"></param>
        /// <param name="jobId"></param>
        /// <returns></returns>
        public DataSet EditByJobId(PyllotUpload pUpload, string jobId)
        {
            this.dsDoc = (System.Data.DataSet)UIFacade.Submit("DOCATTACHMENTS_EDITBYJOBID", new object[] { jobId });
            if (dsDoc == null)
            {
                return null;
            }
            this.dtDoc = this.dsDoc.Tables["DM_MANAGEMENT"];
            this.dtAttachments = this.dsDoc.Tables["DM_MANAGEMENT_ATTACHMENTS"];
            isDocManagement = false;

            return dsDoc;
        }

        /// <summary>
        /// 用于 如核销编辑数据
        /// </summary>
        /// <param name="pUpload"></param>
        /// <param name="sourceId"></param>
        /// <returns></returns>
        public void EditBySourceId(string sourceId)
        {
            this.dsDoc = (System.Data.DataSet)UIFacade.Submit("DOCATTACHMENTS_EDITBYSOURCEID", new object[] { sourceId });
            if (dsDoc == null)
            {
                return;
            }
            this.dtDoc = this.dsDoc.Tables["DM_MANAGEMENT"];
            this.dtAttachments = this.dsDoc.Tables["DM_MANAGEMENT_ATTACHMENTS"];
            isDocManagement = false;
        }

        /// <summary>
        /// 保存方法
        /// </summary>
        /// <returns></returns>
        public bool Save()
        {
            //开始保存
            try
            {
                DataSet dsChanges = this.dsDoc.GetChanges();

                if (dsChanges != null)
                {
                    //加载附件数据
                    Hashtable htAttachments = new Hashtable();
                    if (dsChanges.Tables["DM_MANAGEMENT_ATTACHMENTS"] != null)
                    {
                        foreach (DataRow dr in dsChanges.Tables["DM_MANAGEMENT_ATTACHMENTS"].Rows)
                        {
                            if (dr.RowState == DataRowState.Added)
                            {
                                FileStream stream = System.IO.File.Open(dr["SERVER_ATTACHMENTS_PATH"].ToString(), FileMode.Open);
                                byte[] bytes = this.ConvertStreamToByteBuffer(stream);
                                htAttachments.Add(dr["DM_MANAGEMENT_ATTACHMENTS_ID"].ToString(), bytes);
                                stream.Close();
                                stream = null;
                            }
                        }
                    }

                    DataSet ds = (DataSet)UIFacade.Submit("DOCATTACHMENTS_SAVE", new object[] { dsChanges, isDocManagement, htAttachments });
                    this.dsDoc.Merge(ds, false);
                    this.dsDoc.AcceptChanges();
                }
                //UIFacade.MsgBox("附件上传成功");
                //UIFacade.MsgBox(SystemMessage.SAVE_SUCCESS);
                return true;
            }
            catch (Tools.Service.ExceptionHelper exCustom)
            {
                UIFacade.MsgBox(exCustom.OriginMessage);
                return false;
            }
            catch (Exception e)
            {
                //UIFacade.MsgBox("附件上传失败");
                //UIFacade.MsgBox(SystemMessage.SAVE_FAILURE);
                return false;
            }
            finally
            {

            }
        }

        /// <summary>
        /// 把stream转换成buffer
        /// </summary>
        /// <param name="theStream"></param>
        /// <returns></returns>
        private byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream)
        {
            int b1;
            System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
            while ((b1 = theStream.ReadByte()) != -1)
            {
                tempStream.WriteByte(((byte)b1));
            }
            return tempStream.ToArray();
        }

        /// <summary>
        /// 下载文件
        /// </summary>
        /// <returns></returns>
        private string DownloadFile()
        {
            object attachmentsId = UIFacade.GetFocusDataColValue(this.frmUploadControl.GrdAttachments, "DM_MANAGEMENT_ATTACHMENTS_ID");
            if (attachmentsId == null) return "";

            if (UIFacade.GetFoucusDataRow(this.frmUploadControl.GrdAttachments).RowState == DataRowState.Added)
            {
                return UIFacade.GetFocusDataColValue(this.frmUploadControl.GrdAttachments, "SERVER_ATTACHMENTS_PATH").ToString();
            }
            else
            {
                byte[] bytes = (byte[])UIFacade.Submit("DOCATTACHMENTS_DOWNLOADFILE", new object[] { attachmentsId.ToString() });

                MemoryStream m = null;
                FileStream f = null;

                string fileName = "";
                try
                {
                    fileName = System.Environment.GetEnvironmentVariable("TEMP") + "//PyllotCargo~" + System.DateTime.Now.Ticks.ToString() + "~" + UIFacade.GetFocusDataColValue(this.frmUploadControl.GrdAttachments, "ATTACHMENTS_NAME").ToString();

                    //定义并实例化一个内存流,以存放提交上来的字节数组。
                    m = new MemoryStream(bytes);

                    //定义实际文件对象,保存上载的文件。
                    f = new FileStream(fileName, FileMode.Create);

                    //把内存里的数据写入物理文件
                    m.WriteTo(f);
                }
                catch (Exception ex)
                {
                }
                finally
                {
                    if (m != null) m.Close();
                    if (f != null) f.Close();
                    f = null;
                    m = null;
                }

                return fileName;
            }
        }

        #region "事件"

        /// <summary>
        /// 删除附件事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BtnRemove_Click(object sender, EventArgs e)
        {
            DataRow dr = UIFacade.GetFoucusDataRow(this.frmUploadControl.GrdAttachments);
            if (dr == null) return;

            if (UIFacade.MsgBoxYesNo(SystemMessage.DELETE_CONFIRM) == DialogResult.Yes)
            {
                dr.Delete();
            }
        }

        /// <summary>
        /// grid双击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void GrdAttachments_DoubleClick(object sender, EventArgs e)
        {
            DataRow dr = UIFacade.GetFoucusDataRow(this.frmUploadControl.GrdAttachments);

            string fileName = DownloadFile();

            if (fileName.Equals("")) return;

            try
            {
                System.Diagnostics.Process.Start(fileName);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.SaveFileDialog fileDlg = new SaveFileDialog();

                if (fileDlg.ShowDialog() == DialogResult.OK)
                {
                    System.IO.File.Copy(fileName, fileDlg.FileName);
                }
            }
        }

        /// <summary>
        /// 下载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BtnDownload_Click(object sender, EventArgs e)
        {
            string fileName = this.DownloadFile();
            if (fileName.Equals("")) return;

            System.Windows.Forms.SaveFileDialog fileDlg = new SaveFileDialog();
            //fileDlg.FileName = fileName;
            if (fileDlg.ShowDialog() == DialogResult.OK)
            {
                System.IO.File.Copy(fileName, fileDlg.FileName);
            }
        }

        /// <summary>
        /// 上传事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BtnAttach_Click(object sender, EventArgs e)
        {
            if (dtDoc.Rows.Count  == 0)
            {
                this.NewDataSet();
            }
            System.Windows.Forms.OpenFileDialog fileDlg = new OpenFileDialog();
            if (fileDlg.ShowDialog() == DialogResult.OK)
            {
                DataRow dr = this.dtAttachments.NewRow();
                dr["DM_MANAGEMENT_ATTACHMENTS_ID"] = System.DateTime.Now.Ticks;
                dr["DM_MANAGEMENT_ID"] = this.dtDoc.Rows[0]["DM_MANAGEMENT_ID"];

                //dr["ATTACHMENTS_NAME"] = fileDlg.SafeFileName; 修改得到文件名的方法,防止在不同版本函数库在使用SafeFileName时出问题 modify by aaron 20080622
                int len = fileDlg.FileName.Length;
                int idx = fileDlg.FileName.LastIndexOf("//") + 1;
                dr["ATTACHMENTS_NAME"] = fileDlg.FileName.Substring(idx, len - idx);

                dr["SERVER_ATTACHMENTS_PATH"] = fileDlg.FileName;
                this.dtAttachments.Rows.Add(dr);
            }
        }

        #endregion

        public enum docType
        {
            海出仓储,
            海进仓储,
            空出仓储,
            空进仓储,
            HB_L,
            MB_L,
            核销单,
            税务发票,
            Invoice,
            STATEMENT,
            TAX_REFUND_SHEET,
            n新的文件类型,
            改单保函
        };
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值