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の何か...?
ご協力いただきありがとうございます!
.NETでそのようなことをしたのは少し前のことですが、フォーム入力のクローンを動的に開始したら、Request.Formにアクセスして、送信された値を手動で見つける必要があると思います。いくつかの(ファイル以外の)入力を順次識別子で複製するjQueryコードを作成しました ここ 。一意の識別子がある限り、ループを実行してRequest.Form ["MultiFile1_F" + counter]が存在するかどうかを確認し、そこから移動できます。
チェックする2つのこと:
また、runat = "server"は、Request.Filesが機能するかどうかとは関係ありません。これは、実際にファイルを投稿するブラウザーの問題です。
この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のリクエストを許可します。
複数のファイルアップローダーとして ploadify を強くお勧めします。 jqueryとflashを使用して、ユーザーがctrl +必要なすべてのファイルをクリックして複数のファイルを一度にアップロードできるようにします。次に、アップロードするファイルのキューを表示し、完了時にファイルをキューから削除します。また、ユーザーがアップロードできる拡張機能を指定できるため、拡張機能の検証を行う必要がありません。
編集:
フラッシュを使用したくない場合 Ajax Upload も非常にうまく機能します。私のサイト会社のサイトのユーザーがuploadifyで最適に動作する適切なバージョンのフラッシュを持っていない場合は、Ajaxアップロードに切り替えます。どちらも私にとっては非常にうまく機能します。