web-dev-qa-db-ja.com

ASP.net-jQueryの複数ファイルアップロードプラグインを使用した複数アップロード

ASP.netのFileUploadコントロールを使用してアップロードする方法を知っています。

私がやりたいのは、このjQuery複数ファイルアップロードプラグインを使用して複数のファイルをアップロードすることです。

アップロードするファイルが複数選択されている場合は、次のようになります。

<input type="file class="multi MultiFile" id="MultiFile1_F3" name="file1[]" style="position: absolute; top: -3000px;">

しかし、asp.netからこれらのファイルを操作する方法を理解することはできません。次のリンクの指示に従ってRequest.Filesを使用してみました: jQueryから選択した後の複数のファイルのASP.Netアップロード

それはうまくいきません。コンパイル時にrunat = "server"でマークされたコントロールに対してのみ機能すると思います。

誰かがこれを行う方法を知っていますか?たぶんRequest.Formの何か...?

ご協力いただきありがとうございます!

14
Ronnie Overby

.NETでそのようなことをしたのは少し前のことですが、フォーム入力のクローンを動的に開始したら、Request.Formにアクセスして、送信された値を手動で見つける必要があると思います。いくつかの(ファイル以外の)入力を順次識別子で複製するjQueryコードを作成しました ここ 。一意の識別子がある限り、ループを実行してRequest.Form ["MultiFile1_F" + counter]が存在するかどうかを確認し、そこから移動できます。

2
Tom

チェックする2つのこと:

  • フォームにenctype = "multipart/form-data"属性が設定されていることを確認してください。これは、アップロードを有効にするために必要です。
  • すべてのファイル入力にid属性とname属性の両方が設定されていることを確認してください。何らかの理由で、両方を設定しないと、奇妙なことが起こります。

また、runat = "server"は、Request.Filesが機能するかどうかとは関係ありません。これは、実際にファイルを投稿するブラウザーの問題です。

5
Chris Hynes

このjQueryプラグインは、生成されたすべての入力コントロールにまったく同じ名前属性を与えていました。

このため、ファイルは投稿されていませんでした。

私は独自のJavaScriptソリューションを構築しました。

コメントでコードへのリンクを投稿します。

編集

これをもう一度見てみると、自分がやろうとしていたことはそれほど難しくないことがわかりました。 jqueryの複数ファイルアップロードプラグインをaspxフォームで正常に動作させることができました。なぜこんなに困っていたのかわかりません。

1.)WebフォームにjQueryライブラリを含めます。

<script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type = "text/javascript" />

2.)Webフォームで複数ファイルプラグインを参照します( ここからダウンロード ):

<script src = "jquery.MultiFile.pack.js" type = "text/javascript">

3.)class = "multi"を使用して、Webフォームにファイル入力を追加します。

<input type = "file" class = "multi" />

4.)フォームの送信時に、コードを実行するか、次のようなメソッドを呼び出します。

    void SendMail(string from, string to, string subject, string body, string smtpServer)
    {
        // create mail message
        MailMessage mail = new MailMessage(from, to, subject, body);

        // attach posted files
        for (int i = 0; i < Request.Files.Count; i++)
        {
            HttpPostedFile file = Request.Files[i];
            mail.Attachments.Add(new Attachment(file.InputStream, file.FileName));
        }

        //send email
        new SmtpClient(smtpServer).Send(mail);
    }

これは、aspxページから送信された電子メールに複数のファイルを添付するために私がしなければならなかったすべてです。

アップロードできるファイルの合計サイズを増やしたい場合は、これをweb.configファイルに追加します。

<system.web>
    <httpRuntime executionTimeout="240" maxRequestLength="30720"/>
</system.web>

ExecuteTimeoutは秒単位で測定され、maxRequestLengthはキロバイト単位で測定されます。この例では、リクエストは4分後にタイムアウトし、30MBのリクエストを許可します。

5
Ronnie Overby

複数のファイルアップローダーとして ploadify を強くお勧めします。 jqueryとflashを使用して、ユーザーがctrl +必要なすべてのファイルをクリックして複数のファイルを一度にアップロードできるようにします。次に、アップロードするファイルのキューを表示し、完了時にファイルをキューから削除します。また、ユーザーがアップロードできる拡張機能を指定できるため、拡張機能の検証を行う必要がありません。

編集:
フラッシュを使用したくない場合 Ajax Upload も非常にうまく機能します。私のサイト会社のサイトのユーザーがuploadifyで最適に動作する適切なバージョンのフラッシュを持っていない場合は、Ajaxアップロードに切り替えます。どちらも私にとっては非常にうまく機能します。

2
Josh Mein