0

ここで説明されているように ajaxFileUpload を使用しています: http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/AjaxFileUpload/AjaxFileUpload.aspx

アップロードして別の場所に保存するには、1 つのページで 3 つの ajaxFileUpload コントロールを使用する必要があります。まず、すべてのアップローダ コントロールが最初のアップローダの UploadComplete イベントを呼び出します (例: ajaxFileupload2 は常に ajaxFileUpload1_UploadComplete を呼び出します)。

次に、以下の投稿を見つけて、最後の答えを試してください。 Ajax ツールキット ファイルのアップロードが呼び出されない

最後の回答を試した後、3人のアップローダーがanyUploaderイベントによって委任された独自のイベントを呼び出しています。ただし、「メッセージ: ファイル名を null にすることはできません」という別の問題に直面していますが、最初のアップローダーは正常に動作しているのに、2 番目または 3 番目のコントロールでエラーがスローされます。


Stack Trace:
Error found in FileUploadComplete2.
Message: File name cannot be null.
Parameter name: sourceFileName
Stack Trace:    at System.IO.File.Move(String sourceFileName, String destFileName)
   at AjaxControlToolkit.AjaxFileUpload.SaveAs(String fileName, Boolean deleteAzureBlob) in f:\TeamCity\buildAgent\work\80acd78aa4c25314\Server\AjaxControlToolkit\AjaxFileUpload\AjaxFileUpload.cs:line 473
   at AjaxControlToolkit.AjaxFileUpload.SaveAs(String fileName) in f:\TeamCity\buildAgent\work\80acd78aa4c25314\Server\AjaxControlToolkit\AjaxFileUpload\AjaxFileUpload.cs:line 441
   at FileUpload.AjaxFileUploadTwo_UploadComplete(Object sender, AjaxFileUploadEventArgs e) in c:\Projects\WebSite\FileUpload.aspx.cs:line 364

アドバイスをいただければ幸いです。

私の主な要件は、ユーザーが使用するアップローダーに応じて、ユーザーが同時にアップロードして別の場所に保存できるようにすることです。

前もって感謝します!

4

2 に答える 2

0

最後に、私の問題を解決する回避策を見つけました。2 番目のアップローダ以降、「ファイル名を null にすることはできません」というエラーがスローされるため、プロジェクトの要件を解決して満たすための回避策を以下に示します。

1) 3 つのすべてのアップローダーによって呼び出される共通の関数を 1 つ作成します
2) ClientID によって定義される各アップローダーに異なるパスを設定します (参照: Ajax ツールキット ファイルのアップロードは呼び出されません)
3) AjaxUploadOne を介してすべての ajax 関数を使用します (例: : 3 つすべてのアップローダーの AjaxUploadOne.SaveAs 関数)。-- この行で問題が解決しました。その前に各アップローダーのSaveAs機能を使っているのですが、思うように動きません。

私のサンプルコードは次のようになります & すべての ajaxfileupload コントロールが同じ関数を呼び出しました:-


protected void AnyUploader_FileUploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
    {
        try
        {
            string path = "";
            if (Request.QueryString["uplCtrlID"] != null)
            {
                //uplCtrlID (the query string param we injected with the overriden JS function)
                //contains the ID of the uploader.
                //We'll use that to fire the appropriate event handler...
                if (Request.QueryString["uplCtrlID"] == AjaxFileUploadOne.ClientID)
                {      
                    /** different path assignment for each uploader **/
                    path = @"C:\Temp\FileUploaderOne\";
                    if (!Directory.Exists(path))  Directory.CreateDirectory(path);
                    AjaxFileUploadOne.SaveAs(path + e.FileName);                   
                }
                else if (Request.QueryString["uplCtrlID"] == AjaxFileUploadTwo.ClientID)
                {
      /** different path assignment for each uploader **/
                    path = @"C:\Temp\FileUploaderTwo\";
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
                    AjaxFileUploadOne.SaveAs(path + e.FileName);              
                }
                else if (Request.QueryString["uplCtrlID"] == AjaxFileUploadThree.ClientID)
                {
                    /** different path assignment for each uploader **/
                    path = @"C:\Temp\FileUploaderThree\";
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);
                    AjaxFileUploadOne.SaveAs(path + e.FileName);                                    
                }
            }            
        }
        catch (Exception ex)
        {
        }
    }

私と同じような悩みを抱えている方の参考になれば幸いです。ありがとうございました。

于 2013-10-28T07:02:34.723 に答える