0

私はイベントが初めてで、フラッシュが初めてです。Plupload を使用して、自分のフォルダーにファイルをアップロードすることができました。私はジェネリックハンドラーを使用しています(それも新しいです!)

これが私のコードです:

    <style type="text/css">
    @import url(/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css);
</style>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript" src="http://bp.yahooapis.com/2.4.21/browserplus-min.js"></script>
<script type="text/javascript" src="/plupload/js/plupload.full.js"></script>
<script type="text/javascript" src="/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js"></script>
<script type="text/javascript">
    $(function () {
        $("#uploader").pluploadQueue({
            // General settings
            runtimes: 'gears,flash,silverlight,browserplus,html5',
            url: '/uploader.ashx',
            max_file_size: '10mb',
            chunk_size: '1mb',
            unique_names: true,
            preinit: attachCallbacks,
            // Resize images on clientside if we can
            //resize: { width: 320, height: 240, quality: 90 },
            // Specify what files to browse for
            filters: [
                { title: "Image files", extensions: "jpg,gif,png" },
                { title: "Zip files", extensions: "zip" }
            ],
            // Flash settings
            flash_swf_url: '/plupload/js/plupload.flash.swf',
            // Silverlight settings
            silverlight_xap_url: '/plupload/js/plupload.silverlight.xap'
        });

        // Client side form validation
        $('form').submit(function (e) {
            var uploader = $('#uploader').pluploadQueue();
            // Validate number of uploaded files
            if (uploader.total.uploaded == 0) {
                // Files in queue upload them first
                if (uploader.files.length > 0) {
                    // When all files are uploaded submit form
                    uploader.bind('UploadProgress', function () {
                        if (uploader.total.uploaded == uploader.files.length)
                            $('form').submit();
                    });
                    uploader.start();
                } else
                    alert('You must at least upload one file.');
                e.preventDefault();
            }


        function attachCallbacks(Uploader) {

        Uploader.bind('FileUploaded', function(Up, File, Response) {
            if ((Uploader.total.uploaded + 1) == Uploader.files.length) {
                window.location = '/display.aspx';
            }
        });
    }
});

そして、私のコードでは、私のハンドラー:

public class uploader : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            int chunk = context.Request["chunk"] != null ? int.Parse(context.Request["chunk"]) : 0;
            string fileName = context.Request["name"] ?? string.Empty;

            HttpPostedFile fileUpload = context.Request.Files[0];

            var uploadPath = context.Server.MapPath(GlobalVariables.UploadPath);
            using (
                var fs = new FileStream(Path.Combine(uploadPath, fileName),
                                        chunk == 0 ? FileMode.Create : FileMode.Append))
            {
                var buffer = new byte[fileUpload.InputStream.Length];
                fileUpload.InputStream.Read(buffer, 0, buffer.Length);

                fs.Write(buffer, 0, buffer.Length);
            }

            context.Response.ContentType = "text/plain";
            context.Response.Write("Success");
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }

これは 100% 機能しています

問題は、アップロードが完了しても何も起こらないことです。ファイルがアップロードされたという事実が表示されました。

どういうわけか、新しいメソッドを起動するように指示する必要があります。つまり、アップロードされたファイルを処理する必要があります。それらを適切なフォルダに移動します...もっと良い名前を付けてください...それらをデータベースに追加し、おそらく表示画面にリダイレクトします。

そのため、コードに何かを実行するように指示するフラッシュ コントロール (イベント) と、現在処理できるファイル (アップロードされたファイルのリスト) をコードに伝える必要があります。

これは可能ですか?

編集: attachCallbacks メソッドを追加しました。ページにリダイレクトされるようになりましたが、何らかの方法でアップロードされたファイルのリストをメソッド (汎用ハンドラーでしょうか?) に送信し、ファイルを処理する必要があります。メソッドにリダイレクトするにはどうすればよいですか?

4

1 に答える 1

0
........
uploader.bind('UploadProgress', function () {
    if (uploader.total.uploaded == uploader.files.length)
    $('form').submit();
});

uploader.bind('UploadComplete', function (up, files) {
    //files are uploaded, call script for each file...etc
});


uploader.start();
..........
于 2011-12-27T05:18:42.127 に答える