2024年5月28日 星期二

V20304H – [維護附檔]鈕 – [新增附檔] [刪除附檔] [瀏覽附檔] - 資料庫檔案.[上傳][下載][刪除] - 下載檔案

 目的: V20304H – [新增附檔] [刪除附檔] [瀏覽附檔]  - 資料庫檔案.[上傳][下載][刪除]

處理說明:  1>  [新增附檔]鈕 - 選擇檔案後上傳
                          1>>*.js  
                                 SelectFile(Ok_process);   
                          2>>*.cs   - 將 檔案上傳至 Request.Files[0], 並將檔案內容存入 byte[]
                               Stream file_Strm = Request.Files[cur_FName].InputStream;
                                //byte[] fileRcrd = new byte[fileSize];
                               BinaryReader br = new BinaryReader(file_Strm);
                               byte[] fileBody = br.ReadBytes((Int32)file_Strm.Length);
                          3>將檔案寫入資料庫
                               Tmp_Sql = " INSERT  INTO  AMM_AKFL "
                                               + "  ( AMMNO,"
                                               + " ITM,FILENAME,FILESIZE,FILEDATE,FILEBODY )"
                                               + "  VALUES "
                                               + "(" + myfunc.AA(Tmp_AMMNO) + ","
                                                        + myfunc.AA(Tmp_NEXT_ITM) + "," 
                                                       + myfunc.AA(Tmp_FILENAME) + "," 
                                                       + myfunc.AA(Tmp_FILESIZE) + "," 
                                                       + myfunc.AA(Tmp_FILEDATE) 
                                                       + ", :FILEBODY "
                                              + ") ";
                              cmd.CommandText = Tmp_Sql;
                              cmd.Parameters.Add("FILEBODY", OracleDbType.Blob, fileBody.Length);
                              cmd.Parameters["FILEBODY"].Value = fileBody; 
                              cmd.ExecuteNonQuery();

                    2>[刪除附檔]鈕  - 一般的 Del SQL 即可
                           Tmp_Sql = "   DELETE  AMM_AKFL "
                                           + "  WHERE  AMMNO=" + myfunc.AA(Tmp_AMMNO)
                                           + "  AND      ITM=" + myfunc.AA(Tmp_ITM);
                          cmd.CommandText = Tmp_Sql;
                          cmd.ExecuteNonQuery();

3>[瀏覽檔案]鈕 : 利用VUTLAPI/dnloadFile_Cnd?
   var Tmp_Flds = "FILENAME,FILEBODY"
  var Tmp_Cnd = "  AND       AMMNO=" + AA(cur_rec.data["AMMNO"])
                        + "  AND       ITM=" + AA(cur_rec.data["ITM"]);
var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=AMM_AKFL&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
document.location = Tmp_url;



1>*.js

var sub1_Btns = [
{
xtype: 'button', text: '新增附檔', id: 'sub1_AddBtn',
listeners: {
click: function () {
//mysuccessalert("新增附檔");
SelectFile(Ok_process);
}}},


//[選擇檔案]子畫面. [確認匯入]鈕 , 處理
function Ok_process_V20304H(me, e, eOpts) {
    //取得 [檔案上傳].檔名
    var Tmp_FileObj = Ext.getCmp('FName');
    console.log("FName Obj:", Tmp_FileObj);
    var Tmp_Str = "";
    var np = {}
    np["FName"] = Ext.getDom(Tmp_FileObj.inputId).value;    
    np["AMMNO"] = Ext.getCmp("sub_AMMNO").getValue();
    console.log("FName: ", np.FName);
    //submit會將fileUploadForm裡面input name送到後端
    //Ext.getCmp('btn_FileIn').getForm().submit({
    me.up("form").submit({
        //standardSubmit: false,    //default:false
        url: '../api/V20304HAPI/uploadFile2AMM_AKFL',
        method: 'POST',
        headers: { 'Content-type': 'multipart/form-data' },
        params: np,        
    });
    //顯示結果訊息..
    var mask = new Ext.LoadMask(Ext.getBody(), {
        msg: '處理中,請稍待...'
    });
    mask.show();//使用 mask 需手動呼叫show() 方法下
    //若要傳送檔案到前端, 必需用 Cookie 判斷後端是否已完成
    //每1秒檢核一次,是否已完成, 若已完成,則不再檢核
    var timer = setInterval(function () {
        var r = r_cookies('EX_DFile');
        //console.log("r_cookies=", r);
        if (!checkisnull(r)) {
            mysuccessalert(r);
            clearInterval(timer);
            mask.hide();
            timer = null;
            //將[選擇檔案子視窗]關閉
            Ext.getCmp("SelectForm_cancelbtn").fireHandler();
            //將[sub1_Grid]重新取資料
            Ext.getCmp('sub1_Grid').reloadGridData();
            //this.up("window").close();
            //this.up("window").destroy();
        }
    }, 1000);  //1000ms = 1sec
};  // end of Ok_process() {  //批次新增







2>*.cs
// sub1.[新增附檔] 鈕 , 新增一筆 AMM_AKFL資料 (上傳檔案)
[HttpPost]
public void uploadFile2AMM_AKFL()
{
HttpContext c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
string FName = nvc["FName"];
string Tmp_AMMNO = nvc["AMMNO"];
HttpCookie MyCookie; //將訊息傳至前端
HttpRequest Request = HttpContext.Current.Request;
var response = this.Request.CreateResponse();
string file_Name = FName;
string FILEDT = DateTime.Now.ToString("yyyy/MM/dd");
string Tmp_RtnMsg = "";
string Tmp_Sql = "", Tmp_Str = "";

OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
OracleCommand cmd = new OracleCommand();
OracleDataReader reader;
conn.Open();
cmd.Connection = conn;
foreach (string cur_FName in Request.Files)
{
string fileType = Request.Files[cur_FName].ContentType;
Stream file_Strm = Request.Files[cur_FName].InputStream;
file_Name = Path.GetFileName(Request.Files[cur_FName].FileName);
int fileSize = Request.Files[cur_FName].ContentLength;
//byte[] fileRcrd = new byte[fileSize];
BinaryReader br = new BinaryReader(file_Strm);
byte[] fileBody = br.ReadBytes((Int32)file_Strm.Length);

string Tmp_FILENAME = file_Name;
string Tmp_NEXT_ITM = get_NEXT_ITM(Tmp_AMMNO);
string Tmp_FILEDATE = FILEDT; // 當天
string Tmp_FILESIZE = fileSize.ToString();

//更新資料庫欄位值
try
{
Tmp_Sql = " INSERT INTO AMM_AKFL "
                + " ( AMMNO,"
                  + " ITM,FILENAME,FILESIZE,FILEDATE,FILEBODY )"
               + " VALUES "
              + "(" + myfunc.AA(Tmp_AMMNO) + ","
+ myfunc.AA(Tmp_NEXT_ITM) + "," + myfunc.AA(Tmp_FILENAME) + "," + myfunc.AA(Tmp_FILESIZE) + "," + myfunc.AA(Tmp_FILEDATE) + ", :FILEBODY "
+ ") ";

cmd.CommandText = Tmp_Sql;
cmd.Parameters.Add("FILEBODY", OracleDbType.Blob, fileBody.Length);
cmd.Parameters["FILEBODY"].Value = fileBody;
cmd.ExecuteNonQuery();

Tmp_RtnMsg = "[新增附檔]成功!!";
MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_RtnMsg));
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();
return;
}// try
catch (Exception e)
{ //失敗
Tmp_RtnMsg = "[新增附檔]失敗!!<br>"
                        + e.Message + "<br>";
MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_RtnMsg));
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();
return;
}
finally
{
conn.Close();
}
} //end of foreach (string cur_FName in Request.Files)
return;
} // end of uploadFile2AMM_FMF()


   cur_rec = cur_recs[0];
                        console.log("cur_rec:", cur_rec);
                        console.log("Tmp_sub1_Grid.store:", Tmp_sub1_Grid.store);
                        var Tmp_Flds = "FILENAME,FILEBODY"
                        var Tmp_Cnd = "  AND       AMMNO=" + AA(cur_rec.data["AMMNO"])
                                                 + "  AND       ITM=" + AA(cur_rec.data["ITM"]);
                        var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=AMM_AKFL&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
                        //document.location = "../api/VUTLAPI/dnloadSS_File?FNAME=V20304H_匯入格式.xlsx  ";                             
                        document.location = Tmp_url;
                        mysuccessalert("瀏覽附檔((下載))成功!!");



沒有留言:

張貼留言