none
怎樣用OpenFileDialog 做file upload? RRS feed

  • 問題

  • OpenFileDialog 是winform 的,

    if (openFileDialog1.ShowDialog() == DialogResult.OK) <-- error

    目的是要按button 就開openfile dialog 選擇file 後就upload 而不用fileupload 裏的textbox

    fileupload control加了後visible = false, 想用openfiledialog 給file path 給fileupload control 去做upload

    2012年1月4日 上午 04:14

解答

所有回覆

  • 目的是要按button 就開openfile dialog 選擇file 後就upload 而不用fileupload 裏的textbox

     

    這個需求可找jQuery套件實現

    就個人所知

    JQuery  Uploadify可以做到(Custom Demo)選擇檔案自動上傳,也可以指定選擇檔案不要自動上傳(Basic Demo)

    http://www.uploadify.com/demos/

     

    Reference:

    [VB][jQuery] 使用 jQuery.uploadify 上傳檔案(主要實現了上傳進度)
    C# 使用uploadify批次上傳及帶進度條




    • 已編輯 Shadow .Net 2012年1月4日 上午 04:31
    • 已標示為解答 沈世鈞 2012年1月5日 上午 08:10
    • 已取消標示為解答 沈世鈞 2012年1月5日 上午 09:06
    • 已標示為解答 沈世鈞 2012年1月9日 上午 01:23
    2012年1月4日 上午 04:25
  • 您可以編輯<input type="file">控制項, 加入onchange設定, 自己做Submit, 如下:

    <input
      type="file"
      onchange="if (confirm('Upload ' + this.value + '?')) this.form.submit();"
    >


    2012年1月4日 上午 04:30
  •  或許可以考慮用Silverlight。

    http://www.c-sharpcorner.com/uploadfile/nipuntomar/file-upload-in-silverlight/

    http://www.dotblogs.com.tw/chhuang/archive/2008/12/16/6416.aspx,艾小克


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2012年1月4日 上午 05:37
  • 跟著example 做, openfiledialog 沒有File 和OpenRead() , 我用的是VS2008 ,silverlight 3

    UploadFile(dlg.FileName, dlg.File.OpenRead());

    2012年1月4日 上午 06:18
  • compile 了, 但run 的時候 404 Error file not found
    2012年1月4日 上午 07:47
  • 開了silver application 後加入web site

    showdialog error 跟之前的error 一樣

    目前的執行緒必須先設為單一執行緒 Apartment (STA) 模式,才能進行 OLE 呼叫。請確認您的 Main 函式上已經標記有 STAThreadAttribute。 這個例外狀況只有在偵錯工具附加至處理序時會引發。

    難道要全部file move 到silverlight.web 才可行?

    • 已編輯 沈世鈞 2012年1月4日 上午 07:51
    2012年1月4日 上午 07:50
  • move 了過去silverlight.web 也是相同error, silverlight.web 裏沒有Main() function 可以加[STAThread]
    2012年1月4日 上午 08:07
  •  

    難道要全部file move 到silverlight.web 才可行?


    Dear 大大

    如果silverlight太難實現的話

    小弟這裡其實有現成的JQuery  Uploadify Web Site懶人包

    您可以直接下載去用Web site專案開啟執行Default.aspx程式就可以了

    詳細用法,小弟在上面的回覆也有給官網和其他部落客的研究,希望幫得上您



    • 已編輯 Shadow .Net 2012年1月4日 上午 08:34
    • 已標示為解答 沈世鈞 2012年1月5日 上午 08:10
    • 已取消標示為解答 沈世鈞 2012年1月5日 上午 09:06
    • 已標示為解答 沈世鈞 2012年1月9日 上午 01:24
    2012年1月4日 上午 08:34
  • 加了這個uploadify來試 , Gridview 消失了只餘下scrollbar, 是不是Javascript 又和某些東西相撞了?
    2012年1月4日 上午 09:17
  • 加了這個uploadify來試 , Gridview 消失了只餘下scrollbar, 是不是Javascript 又和某些東西相撞了?
    可以的話,能夠貼上您的代碼供大家研究嗎?

    2012年1月4日 上午 09:20
  • 雖然只是一部分也太長了, Gridview 的部分, 和Masterpage, 一個default page 裏一個tab control 包晒所有東西

    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <asp:ContentPlaceHolder id="head" runat="server">
        </asp:ContentPlaceHolder>
        <link href="uploadify/uploadify.css" type="text/css" rel="stylesheet" />
        <script type="text/javascript" src="uploadify/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="uploadify/swfobject.js"></script>
        <script type="text/javascript" src="uploadify/jquery.uploadify.v2.1.4.min.js"></script>
        <script type="text/javascript">
    
        <script language="javascript" type="text/javascript">
            $(document).ready(function() {
                $('#uploadify').uploadify({
                    'uploader': 'uploadify/uploadify.swf',
                    'script': 'Default.aspx',
                    'cancelImg': 'uploadify/cancel.png',
                    //'folder': 'uploads',
                    'queueID': 'fileQueue',
                    'auto': true, /*一選完檔案就自動上傳 */
                    'multi': true,
                    'sizeLimiti': 10485760,
                    //'fileExt': '*.jpg;*.gif;*.png',
                    'hideButton': false,
                    'onComplete': function(event, queueID, fileObj, response, data) {
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            $('#uploadmsg').append("<div id='fileitem'>已上傳檔案:" + fileObj.name);
                        }
                    }
                });
            });
            function fetchStatus(address) 
            {  
                var client = new XMLHttpRequest();  
                client.onreadystatechange = function() 
                {   
                    // in case of network errors this might not give reliable results   
                    if(this.readyState == 4)    
                        returnStatus(this, this.status);
                }
                client.open("HEAD", address);
                client.send(); 
            } 
            
            window.onunload = CloseWindows;
            function CloseWindows() {
                //按下X關閉
                //alert("outer");
                if (event.clientY < 0) {
                    try {
                        //alert("inner 1");
                        //var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                        //使用者自行關閉視窗時
                        //xmlhttp.open("POST", "Logout.aspx", false);
                        //xmlhttp.send();
    
                        if (fetchStatus('../Logout.aspx') == 200)
                            window.open('../Logout.aspx', 'Start', 'width=10,height=10, directories=no, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no, resizable=yes titlebar=no, top=0, left=0');
                        else if (fetchStatus('./Logout.aspx') == 200)
                            window.open('./Logout.aspx', 'Start', 'width=10,height=10, directories=no, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no, resizable=yes titlebar=no, top=0, left=0');
    
                        //alert("inner 2");
                        
                        return true;
                    }
                    catch (e) {
                        alert('close windows error message:' + e.message);
                    }
                }
            }
        </script>
        <meta http-equiv="Page-Enter"
        content="progid:DXImageTransform.Microsoft.Fade(duration=.5)" />
        <meta http-equiv="Page-Exit"
        content="progid:DXImageTransform.Microsoft.Fade(duration=.5)" />
    </head>
    <body>
        <form id="form1" method="post" runat="server">

     

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" MasterPageFile="~/ProjectList.master" EnableEventValidation="false" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
        <asp:content id="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <asp:Label ID="Search_Project_Error_Label" runat="server"></asp:Label>
        
            <asp:label runat="server" text="Search Panel"></asp:label>
            <table width="890">
                <tr>
                    <td>
                        <table>
                        <tr>
                            <td><asp:label runat="server" text="Completed Project Name:"></asp:label></td>
                            <td>
                                <asp:ComboBox ID="txtFilterName" runat="server"></asp:ComboBox>
                            </td>
                        </tr>
                        <tr>
                            <td><asp:label runat="server" text="Project Name:"></asp:label></td>
                            <td>
                                <asp:ComboBox ID="txtFilterNature" runat="server"></asp:ComboBox>
                            </td>
                        </tr>
                        <tr>
                            <td><asp:label runat="server" text="Commencement Date:"></asp:label></td>
                            <td>
                                <asp:label runat="server" text="From (mm/yyyy)"></asp:label>
                                <asp:textbox ID="txtfmcommdate" runat="server" Width="60"></asp:textbox>
                                
                                <asp:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="txtfmcommdate" Format="MM/yyyy">
                                </asp:CalendarExtender>
                                
                                <asp:label runat="server" text="To (mm/yyyy) "></asp:label>
                                <asp:textbox ID="txttocommdate" runat="server" Width="60"></asp:textbox>
                                
                                
                                <asp:CalendarExtender ID="CalendarExtender2" runat="server" TargetControlID="txttocommdate" Format="MM/yyyy">
                                </asp:CalendarExtender>
                            </td>
                        </tr>
                        <tr>
                            <td><asp:label runat="server" text="Signed Project Sum (in million):"></asp:label></td>
                            <td>
                                <asp:label runat="server" text="Range between"></asp:label>
                                <asp:textbox ID="txtsignsumfm" runat="server" Width="60"></asp:textbox>
                                <asp:label runat="server" text="and"></asp:label>
                                <asp:textbox ID="txtsignsumto" runat="server" Width="60"></asp:textbox>
                            </td>
                        </tr>
                        <tr>
                            <td><asp:label runat="server" text="Final Project Sum (in million):"></asp:label></td>
                            <td>
                                <asp:label runat="server" text="Range between"></asp:label>
                                <asp:textbox ID="txtfinalsumfm" runat="server" Width="60"></asp:textbox>
                                <asp:label runat="server" text="and"></asp:label>
                                <asp:textbox ID="txtfinalsumto" runat="server" Width="60"></asp:textbox>
                            </td>
                        </tr>
                        <tr>
                            <td></td>
                            <td>
                                <asp:button runat="server" ID="cmdFilter" text="Search Projects" 
                                    onclick="cmdFilter_Click" />    
                                <asp:button runat="server" ID="cmdReset" text="Reset" 
                                    onclick="cmdReset_Click" />    
                            </td>
                        </tr>
                        </table>
                    </td>
                    <td>
                        <table>
                            <tr>
                                <td>
                                    <asp:label runat="server" text="Location :"></asp:label>    
                                </td>
                                <td>
                                    <asp:dropdownlist ID="txtFilterLocation" runat="server"></asp:dropdownlist>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:label runat="server" text="Currency :"></asp:label>    
                                </td>
                                <td>
                                    <asp:dropdownlist ID="txtFilterCurrency" runat="server"></asp:dropdownlist>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:label runat="server" text="Generic Search :"></asp:label>    
                                </td>
                                <td>
                                    <asp:dropdownlist ID="txtFilterCriteria" runat="server"></asp:dropdownlist>
                                    <asp:TextBox ID="txtCriteriaValue" runat="server"></asp:TextBox>
                                    
                                    <asp:TextBox ID="txtfmCritDate" runat="server"></asp:TextBox>
                                    <asp:TextBox ID="txttoCritDate" runat="server"></asp:TextBox>
                                    
                                    <asp:TextBox ID="txtfmCritValue" runat="server"></asp:TextBox>
                                    <asp:TextBox ID="txttoCritValue" runat="server"></asp:TextBox>
                                    
                                    <asp:dropdownlist ID="cboCriteriaValue" runat="server"></asp:dropdownlist>
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:button runat="server" ID="cmdSummary" text="Summary" 
                                        onclick="cmdSummary_Click" />
                                    <asp:button runat="server" ID="cmdDetails" text="Detail"
                                        onclick="cmdDetails_Click" />
                                </td>
                                <td>
                                </td>
                            </tr>
                        </table>
                        <asp:TextBox ID="txtsummary_order1" runat="server" Visible="false"></asp:TextBox>
                        <asp:TextBox ID="txtsummary_field1" runat="server" Visible="false"></asp:TextBox>
                        <asp:TextBox ID="txtdetail_field1" runat="server" Visible="false"></asp:TextBox>
                        <asp:TextBox ID="txtdetail_order1" runat="server" Visible="false"></asp:TextBox>
                    </td>
                </tr>
            </table>
        
        <table>
        <tr>
            <td>
                <asp:Panel ID="Panel1" runat="server" ScrollBars="Both" Width="900" Height="250">
                <asp:gridview runat="server" ID="sfmProjectSummary" AutoGenerateColumns="False" AllowPaging="false"
                 CellPadding="2"
                 Font-Size="XX-Small"
                 OnSelectedIndexChanged="sfmProjectSummary_SelectedIndexChanged">
                <columns>
                    <asp:CommandField ShowSelectButton="True" ItemStyle-Width="50" />
                    <asp:BoundField DataField="ProjectName" HeaderText="Completed Project Name" 
                        SortExpression="ProjectName" />
                    <asp:BoundField DataField="LastSignContractCurrency" HeaderText="Currency" 
                        SortExpression="LastSignContractCurrency" />
                    <asp:BoundField DataField="FirstContractCommencement" HeaderText="Commencement" DataFormatString="{0:dd-MM-yyyy}"
                        SortExpression="FirstContractCommencement" />
                    <asp:BoundField DataField="LastContractCompletion" HeaderText="Completion Date" DataFormatString="{0:dd-MM-yyyy}"
                        SortExpression="LastContractCompletion" />
                    <asp:BoundField DataField="LastOwner" HeaderText="Government/Semi-Private/Private Works"
                        SortExpression="LastOwner" />
                </columns>
                </asp:gridview>
                </asp:Panel>
            </td>
            <td>
                <table>
                    <tr>
                        <td>
                            <asp:button runat="server" ID="cmdProjectSummary_ColSel" text="Edit Columns" />
                        </td>
                        <td>
                            <asp:button runat="server" ID="cmdExportSummary" text="Export" />
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
        </table>
        <table>
        <tr>
            <td>
            <asp:Panel ID="Panel2" runat="server" ScrollBars="Both" Width="900" Height="300">
                <asp:gridview runat="server" ID="sfmProject" AutoGenerateColumns="False" AllowPaging="false"
                 CellPadding="2"
                 DataKeyNames="ProjectCode" 
                 Font-Size="XX-Small"
                 OnSelectedIndexChanged="sfmProject_SelectedIndexChanged" OnRowDataBound="Project_GridView_RowDataBound">
                <columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <a onclick="javascript:window.open('ProjectDetail.aspx?ProjectCode=<%#Eval("ProjectCode")%>&ProjectName=<%#Eval("ProjectName")%>','_Blank','width=1000,height=800')" href="">Select</a>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:BoundField DataField="ProjectName" HeaderText="Completed Project Name" 
                        SortExpression="ProjectName" />
                    <asp:BoundField DataField="ProjectNature" HeaderText="Project Nature" 
                        SortExpression="ProjectNature" />    
                    <asp:BoundField DataField="Second_ProjectNature" HeaderText="Second Project Nature" 
                        SortExpression="Second_ProjectNature" />
                    <asp:BoundField DataField="ProjectCode" HeaderText="Project Code" 
                        SortExpression="ProjectCode" />
                    <asp:BoundField DataField="ContractNumber" HeaderText="Contract Number" 
                        SortExpression="ContractNumber" />    
                    <asp:BoundField DataField="ContractCommencement" HeaderText="Commencement" DataFormatString="{0:dd-MM-yyyy}"
                        SortExpression="ContractCommencement" />
                    <asp:BoundField DataField="OriginalProjectTitle" HeaderText="Original Project Title"
                        SortExpression="OriginalProjectTitle" />
                    <asp:BoundField DataField="ProjectDescription" HeaderText="Project Description"  
                        SortExpression="ProjectDescription" />        
                    <asp:BoundField DataField="SignContractCurrency" HeaderText="Currency" 
                        SortExpression="SignContractCurrency" />
                    <asp:BoundField DataField="FinalContractSum" HeaderText="Final Contract Sum" 
                        SortExpression="FinalContractSum" />
                    <asp:BoundField DataField="Client" HeaderText="Client" 
                        SortExpression="Client" />
                    <asp:BoundField DataField="Architect" HeaderText="Architect" 
                        SortExpression="Architect" />
                    <asp:BoundField DataField="Consultant" HeaderText="Consultant" 
                        SortExpression="Consultant" />
                    <asp:BoundField DataField="Location" HeaderText="Location"  
                        SortExpression="Location" />
                    <asp:BoundField DataField="TypeOfContract" HeaderText="Type Of Contract" 
                        SortExpression="Type Of Contract" />
                    <asp:BoundField DataField="Owner" HeaderText="Government/Semi-Private/Private Works"
                        SortExpression="Owner" />    
                    <asp:BoundField DataField="PYSubsidiaries" HeaderText="PY Subsidiaries" 
                        SortExpression="PY Subsidiaries" />    
                    <asp:BoundField DataField="ContractCompletion" HeaderText="Completion Date" DataFormatString="{0:dd-MM-yyyy}"
                        SortExpression="ContractCompletion" />
                    <asp:BoundField DataField="PYShare" HeaderText="PY Share" 
                        SortExpression="PY Share" />
                    <asp:BoundField DataField="Project_Close_Flag" HeaderText="Project Close"
                        SortExpression="Project_Close_Flag" />
                    <asp:BoundField DataField="Last_Updated_Date" HeaderText="Last Updated Date"  DataFormatString="{0:dd-MM-yyyy}"
                        SortExpression="Last_Updated_Date" />
                    <asp:BoundField DataField="Last_Updated_User" HeaderText="Last Updated User"
                        SortExpression="Last_Updated_User" />
                    
                    
                    <asp:BoundField DataField="Chi_Complete_ProjectName" HeaderText="Chinese Complete ProjectName" Visible="false"
                        SortExpression="Chi_Complete_ProjectName" />
                    <asp:BoundField DataField="AwardDate" HeaderText="Award Date" Visible="false"
                        SortExpression="AwardDate" />
                    <asp:BoundField DataField="OriginalContractCompletion" HeaderText="Original Completion Date" Visible="false"
                        SortExpression="OriginalContractCompletion" />
                    <asp:BoundField DataField="ContractEXpectedCompletion" HeaderText="Expected Completion Date" Visible="false"
                        SortExpression="ContractEXpectedCompletion" />
                    <asp:BoundField DataField="Maintenance_Prd_Fm" HeaderText="Maintenance Period Fm" Visible="false"
                        SortExpression="Maintenance_Prd_Fm" />
                    <asp:BoundField DataField="Maintenance_Prd_To" HeaderText="Maintenance Period To" Visible="false"
                        SortExpression="Maintenance_Prd_To" />
                    <asp:BoundField DataField="Payment_Term" HeaderText="Payment Term" Visible="false"
                        SortExpression="Payment_Term" />
                    <asp:BoundField DataField="Remarks" HeaderText="Remarks" Visible="false"
                        SortExpression="Remarks" />
                    <asp:BoundField DataField="PC_Received_Date" HeaderText="PC Received Date" Visible="false"
                        SortExpression="PC_Received_Date" />
                    <asp:BoundField DataField="SignContractSum" HeaderText="Sign Contract Sum" Visible="false"
                        SortExpression="SignContractSum" />   
                </columns>
                <SelectedRowStyle BackColor="#DBE7F6"/>
                </asp:gridview>
            </asp:Panel>
            </td>
            <td>
                <table>
                <tr>
                    <td>
                        <asp:button runat="server" ID="cmdsfmProject_ColSel" text="Edit Columns" />
                    </td>
                    <td>
                        <asp:button runat="server" ID="cmdExportDetails" text="Export" />
                    </td>
                </tr>
                </table>
            </td>
        </tr>
        </table>
        </asp:content>

     

    2012年1月4日 上午 09:31
  • .....</td> </tr> </table> </td> </tr> </table> </asp:content>

     

    抱歉,代碼太長恕刪

    您要一口氣馬上整合新的東西個人認為會不會太快了

    先開一個乾淨的環境

    一步一步做,把不必要的東西拿掉,讓環境只剩下有問題的代碼再丟上來供大家研究(此步驟也可以幫助您自己釐清問題)

    還有您是做了什麼動作GridView就消失了

    另外也請您記得貼上Code-Behind後台代碼

    個人認為會不會是沒有做DataBind的關係

     


    2012年1月4日 上午 09:42
  • 我只是把你的代碼全加到Masterpage, input uploadify 加到default.aspx, code behind 照樣做.

    就已經令Gridview 消失了, 我想要明天才能慢慢試

    page load 已有databind()
    sfmProjectSummary.DataSource = ie2;
    sfmProjectSummary.DataBind();
    • 已編輯 沈世鈞 2012年1月4日 上午 09:58
    2012年1月4日 上午 09:57
  • 按了button Gridview 沒事了, 只是pageload 的databind 沒有gridview 看, 雖然不完美, 但用得著

    capture screen, 加了'buttonImg': '/uploadify/uploaddatasheet.JPG', 變成白色, 怎樣換圖片?

     <script type="text/javascript">
            $(document).ready(function() {
                $('#uploadify').uploadify({
                    'uploader': 'uploadify/uploadify.swf',
                    'script': 'Default.aspx',
                    'cancelImg': 'uploadify/cancel.png',
                    'buttonImg': '/uploadify/uploaddatasheet.JPG',
                    //'folder': 'uploads',
                    'queueID': 'fileQueue',
                    'auto': true, /*一選完檔案就自動上傳 */
                    'multi': true,
                    'sizeLimiti': 10485760,
                    'fileExt': '*.xls',
                    'hideButton': false,
                    'onComplete': function(event, queueID, fileObj, response, data) {
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            $('#uploadmsg').append("<div id='fileitem'>已上傳檔案:" + fileObj.name);
                        }
                    }
                });
            });

     

    2012年1月5日 上午 01:37
  • 按了button Gridview 沒事了, 只是pageload 的databind 沒有gridview 看, 雖然不完美, 但用得著

    capture screen, 加了'buttonImg': '/uploadify/uploaddatasheet.JPG', 變成白色, 怎樣換圖片?


    應該是您的路徑有錯

    這樣是從Server Root開始算

    假設您的圖片放在網站根目錄的images資料夾底下,執行上傳的程式和images資料夾同一層的話

    可以用

    'buttonImg': 'images/myImg.jpg',

    不然試試

     'buttonImg': '<%= Page.ResolveUrl("~")+"images/myImg.jpg" %>'


    2012年1月5日 上午 02:02
  • 成功upload 了.

    可惜在documentation找不到onmousepressed 的option 加個pressed 的圖

    這個能配合AJAX control 做upload progress 的Logo 嗎?

    2012年1月5日 上午 02:57
  • 這個能配合AJAX control 做upload progress 的Logo 嗎?


    它本身就有上傳進度條,所以我沒這樣試過耶,不好意思
    2012年1月5日 上午 03:46
  • 原來是下面的code 令gridview 消失 , 有了OnLoad 就不行Page_Load

    protected override void OnLoad(EventArgs e)
        {
            string result = "";
            if (IsPostFile())
            {
                result = SaveRequestFiles();
            }
            Response.Write(result);
        }

     

    2012年1月5日 上午 07:08
  • 原來是下面的code 令gridview 消失 , 有了OnLoad 就不行Page_Load

    protected override void OnLoad(EventArgs e)
        {
            string result = "";
            if (IsPostFile())
            {
                result = SaveRequestFiles();
            }
            Response.Write(result);
        }

     


    因為Page_Load被override了

    您可以把override OnLoad這個方法刪除

    把裡面的Code

     string result = "";
            if (IsPostFile())
            {
                result = SaveRequestFiles();
            }
            Response.Write(result);

    移到Page_Load裡面



    • 已編輯 Shadow .Net 2012年1月5日 上午 07:13 誤字
    2012年1月5日 上午 07:12
  • 成功upload 了, 但下面的error 令 ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Upload successfully !');", true); 無法彈出

    我曾猜是不是$(document).ready(function() 裏的( 作怪, 但後面已關括

    網頁錯誤詳細資料
    
    使用者代理程式: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)
    時間戳記: Thu, 5 Jan 2012 07:40:19 UTC
    
    
    訊息: Expected ')'
    行: 1124
    字元: 71
    程式碼: 0
    URI: http://localhost:1147/ProjectList/Default.aspx
    
    

     


    • 已編輯 沈世鈞 2012年1月5日 上午 07:44
    2012年1月5日 上午 07:41
  • 把oncomplete 轉成 便成功了, 但仍會令clientscript 無法彈出, 而oncomplete 取代了

    'onComplete': function(event, queueID, fileObj, response, data) {
                    
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            alert('upload success')
                        }
                    }

     

    2012年1月5日 上午 08:10
  • 慢著, 如果一個page有兩個upload button 那一個SaveRequestFiles 怎麼辦? javascript 沒有指明用SaveRequestFiles
    2012年1月5日 上午 09:08
  • 慢著, 如果一個page有兩個upload button 那一個SaveRequestFiles 怎麼辦? javascript 沒有指明用SaveRequestFiles


    有      'script': 'Default.aspx',
    參數可以指明要用哪一支程式做上傳動作

    因為此範例力求簡單,小弟才會把上傳動作寫在同一支程式的Code-Behind裡

    其實您可以把Default.aspx.cs裡上傳檔案動作都寫在另一支網頁的Code-Behind

    再從參數'script': 'Default.aspx',
    去指定要用哪支程式做上傳動作即可

    範例檔 (執行Default.aspx)





    • 已編輯 Shadow .Net 2012年1月5日 上午 09:35 修改範例檔
    2012年1月5日 上午 09:27
  • 那不是要把另一個public string SaveRequestFiles() 加進 Default2.aspx.cs?

    但SaveRequestFiles() 已在default2.aspx.cs 又怎知 Default.aspx 的UI text 和parameter?!

    2012年1月5日 上午 09:43
  • 那不是要把另一個public string SaveRequestFiles() 加進 Default2.aspx.cs?

    但SaveRequestFiles() 已在default2.aspx.cs 又怎知 Default.aspx 的UI text 和parameter?!


    可以在上傳的頁面uploadify function加以下參數

                    'onSelect': function (event, ID, fileObj) {
                        var elem_id = $(event.target).attr("id"); //取得form id
                        
                        $("#" + elem_id).uploadifySettings('scriptData', { text: $("#<%= TextBox1.ClientID  %>").val() })
                                    },

    由於此套件預設是用post 傳資料給執行上傳動作的程式

    所以執行上傳動作的程式要用

    Request.Form["text"]來取資料

     

    剛剛玩了一下,似乎scriptData沒辦法用$("#form1").serialize()像$.ajax();一樣一口氣傳表單全部資料寫法

    Reference:

    http://stackoverflow.com/questions/4524712/uploadify-passing-a-forms-id-as-a-parameter-with-scriptdata

    http://stackoverflow.com/questions/6799429/how-to-pass-form-value-with-uploadify

     



    2012年1月5日 上午 10:33
  • 補一下完整代碼

    Default.aspx (選擇檔案頁面)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <link href="uploadify/uploadify.css" type="text/css" rel="stylesheet" />
        <script type="text/javascript" src="uploadify/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="uploadify/swfobject.js"></script>
        <script type="text/javascript" src="uploadify/jquery.uploadify.v2.1.4.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
    
    
                $('#uploadify').uploadify({
                    'uploader': 'uploadify/uploadify.swf',
                    'script': 'Default2.aspx',
                    'cancelImg': 'uploadify/cancel.png',
                    'queueID': 'fileQueue',
                    'auto': true, /*一選完檔案就自動上傳 */
                    'multi': true,
                    'sizeLimiti': 10485760,
                    'hideButton': false,
                    'onSelect': function (event, ID, fileObj) {
                        var elem_id = $(event.target).attr("id"); //取得form id
                        $("#" + elem_id).uploadifySettings('scriptData', { text: $("#<%= TextBox1.ClientID %>").val(), text2: "<%=text2 %>" })
                    },
                    'onComplete': function (event, queueID, fileObj, response, data) {
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            $('#uploadmsg').append("<div id='fileitem'>已上傳檔案:" + fileObj.name);
    
                        }
                    }
                });
    
    
            });
        </script>
    
    </head>
    <body>
        <form id="form1" runat="server">
    
        <asp:TextBox runat="server" ID="TextBox1" />
                 (可多選)<input id="uploadify" name="uploadify" type="file" />
                 <div id="fileQueue"></div><!--上傳前的檔案區塊-->
                 <div id="uploadmsg"></div><!--上傳完檔案的訊息-->
        </form>
    </body>
    </html>
    
    

    Default.aspx.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default : System.Web.UI.Page
    {
        protected string text2 = string.Empty;
        protected void Page_Load(object sender, EventArgs e)
        {
            this.text2 = "test2";
        }
    
    
        
    }
    


    Default2.aspx (執行上傳動作的頁面)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="_Default2" %>
    
    
        
    
    
    



    Default2.aspx.cs (執行上傳動作)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    
    public partial class _Default2 : System.Web.UI.Page
    {
        string _filePlace = "~/uploads/";//檔案存放位置
        int _fileMaxSize = 10 * 1024 * 1024;//檔案大小上限(10 MB)
        //string[] _fileAgreeType = new string[]{".png", ".jpg", ".gif"};//可上傳之檔案類型
    
        protected  void Page_Load(object sender,EventArgs e)
        {
            string result = "";
            if (IsPostFile())
            {
                result = SaveRequestFiles();
            }
            Response.Write(result);
    
            //寫檔測試
            File.WriteAllText(Server.MapPath("~/test.txt"), Request.Form["text"] + "\r\n" + Request.Form["text2"]);
    
        }
    
    
        //判斷是否有需上傳的檔案
        public bool IsPostFile()
        {
            for (int i = 0; i < Request.Files.Count; i++)
            {
                if (Request.Files[i].FileName != "")
                {
                    return true;
                }
            }
            return false;
        }
    
    
    
    
        //檢查檔案格式是否符合要求
        private bool CheckFileExt(string _fileExt)
        {
            /*
            bool fileAllow   = false;//旗標
    
            for(int i=0;i<this._fileAgreeType.Length;i++)
            {
                if(_fileExt == this._fileAgreeType[i])
                {
                    fileAllow = true;//允許的副檔名
                    break;//中斷迴圈
                }
            }
            
            return fileAllow;
             */
            return true;
        }
    
    
        //檢查檔案大小是否超過限制
        private bool CheckFileSize(int _fileSize)
        {
            if ((_fileSize / 1024 / 1024) > this._fileMaxSize)
                return false;
            else
                return true;
    
        }
    
        //儲存上傳的檔案
        public string SaveRequestFiles()
        {
            string result = "";
            int fCount = Request.Files.Count;
            for (int i = 0; i < fCount; i++)
            {
    
    
                //取得檔案資訊
                System.IO.FileInfo file = new System.IO.FileInfo(Request.Files[i].FileName);
                //取得檔案名稱(未含路徑)
                string fileName = file.Name;
                //取得檔案附檔名
                string fileExtension = file.Extension.ToLower();
                //取得檔案類型
                string fileType = Request.Files[i].ContentType.ToLower();
                //取得檔案大小
                int fileSize = Request.Files[i].ContentLength;
                //設定新日期檔案名稱
                string tmpFileName = "";
    
                //檢查檔案大小
                if (CheckFileSize(fileSize))
                {
                    //檢查檔案格式
                    if (CheckFileExt(fileExtension))
                    {
    
                        //建立新檔案完整名稱
                        tmpFileName = Guid.NewGuid().ToString() + fileExtension;
    
                        //取得檔案真實路徑
                        string uploadFilePath = Server.MapPath(this._filePlace + tmpFileName);
    
                        //儲存檔案
                        Request.Files[i].SaveAs(uploadFilePath);
                        //回傳檔案路徑
                        result = uploadFilePath;
                    }
                    else
                    {
                        //result = "檔案格式不符合"
                        result = "1";
                    }
    
                }
                else
                {
                    //result = "檔案大小超過限制"
                    result = "0";
                }
    
    
    
    
            }
    
            return result;
    
        }
    }
    

     

     


    • 已標示為解答 沈世鈞 2012年1月7日 上午 02:20
    • 已取消標示為解答 沈世鈞 2012年1月7日 上午 04:56
    2012年1月5日 上午 10:55
  • 想不到還有個Request.Form, 我只知Request.QueryString, 明天再試
    2012年1月5日 下午 12:32
  • 是不是不能兩個放在同一個function? 我發覺第二個button成功upload 但第一個沒有反應, 而且還有一個 expected ) error

       <script type="text/javascript">
            $(document).ready(function() {
                $('#uploadify').uploadify({
                    'uploader': 'uploadify/uploadify.swf',
                    'script': 'Default.aspx',
                    'buttonImg': 'images/uploaddatasheet.jpg',
                    'cancelImg': 'uploadify/cancel.png',
                    //'folder': 'uploads',
                    'queueID': 'fileQueue',
                    'auto': true, /*一選完檔案就自動上傳 */
                    'multi': true,
                    'sizeLimiti': 10485760,
                    'fileExt': '*.xls',
                    'hideButton': false,
                    'onComplete': function(event, queueID, fileObj, response, data) {
    
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            alert('upload success')
                        }
                    }
                });
                $('#File1').uploadify({
                    'uploader': 'uploadify/uploadify.swf',
                    'script': 'Default2.aspx',
                    'cancelImg': 'uploadify/cancel.png',
                    //'folder': 'uploads',
                    'queueID': 'Div1',
                    'auto': true, /*一選完檔案就自動上傳 */
                    'multi': true,
                    'sizeLimiti': 10485760,
                    //'fileExt': '*.jpg;*.gif;*.png',
                    'hideButton': false,
                    'onSelect': function(event, ID, fileObj) {
                        var elem_id = $(event.target).attr("id"); //取得form id
                        $("#" + elem_id).uploadifySettings('scriptData',
                        { ProjectID: $("#<%= ProjectID.ClientID %>").val(), ProjectNature: $("#<%= ProjectNature.ClientID %>").val() })
                    },
                    'onComplete': function(event, queueID, fileObj, response, data) {
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            $('#Div2').append("<div id='fileitem'>已上傳檔案:" + fileObj.name);
                        }
                    }
                });
            });

     

    2012年1月7日 上午 04:58
  • 是不是不能兩個放在同一個function? 我發覺第二個button成功upload 但第一個沒有反應, 而且還有一個 expected ) error

       <script type="text/javascript">
            $(document).ready(function() {
                $('#uploadify').uploadify({
                    'uploader': 'uploadify/uploadify.swf',
                    'script': 'Default.aspx',
                    'buttonImg': 'images/uploaddatasheet.jpg',
                    'cancelImg': 'uploadify/cancel.png',
                    //'folder': 'uploads',
                    'queueID': 'fileQueue',
                    'auto': true, /*一選完檔案就自動上傳 */
                    'multi': true,
                    'sizeLimiti': 10485760,
                    'fileExt': '*.xls',
                    'hideButton': false,
                    'onComplete': function(event, queueID, fileObj, response, data) {
    
                        if (response == "0")
                            alert(fileObj.name + '超過檔案大小');
                        else if (response == "1")
                            alert('檔案格式不符合');
                        else {
                            alert('upload success')
                        }
                    }
                }); 

     

    檢查一下Default.aspx.cs有做上傳動作嗎?

    或是把上傳動作再寫到另一支程式的Code-Behind

     



    2012年1月7日 上午 05:08
  • 搞定了, 原來對應Javscript function的 id 不同也不夠, name相同有影響
    2012年1月9日 上午 01:23