1

私はColdFusionバックエンドスクリプト( https://gist.github.com/1116037で入手可能)を使用してpluploadを実装しました。

アップロードページのurl属性はurl:'../upload.cfc?method=upload'です。これは、cfcスクリプト内の関数を呼び出すだけです。正常に動作します。このスクリプトは、アップロードされた情報ファイルを保持するために「response」と呼ばれる変数も作成します。

私が抱えている問題は、「response」変数に保持されている情報にアクセスすることです。すべてのファイルがサーバーにアップロードされた後、その情報をテーブルに表示したいと思います。

必要に応じてqueue_widgetを使用しています。変数内の情報を処理する関数を呼び出すには、イベント(onComplete)をトリガーする必要があると思いますが、これを行う方法がわかりません。

'response'変数に保持されている情報にアクセスする必要があります。できればColdFusionコードでアクセスする必要があります。pluploadをColdFusionで動作させることができた人はいますか?

ヘルプ、ガイダンス、またはコーディングをいただければ幸いです。

これが私が使用した完全なコードです:

これはメインページです-queue_widget.cfm

<!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" dir="ltr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Plupload - Queue widget example</title>
<link rel="stylesheet" href="../../js/jquery.plupload.queue/css/jquery.plupload.queue.css" type="text/css" media="screen" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript" src="../../js/plupload.js"></script>
<script type="text/javascript" src="../../js/plupload.flash.js"></script>
<script type="text/javascript" src="../../js/jquery.plupload.queue/jquery.plupload.queue.js"></script>
</head>
<body>
  <h1>Queue widget example</h1>
  <p>Shows the jQuery Plupload Queue widget and under different runtimes.</p>
  <div style="float: left; margin-right: 20px">
  <h3>Flash runtime</h3>
    <div id="flash_uploader" style="width: 700px;">Your browser does not have Flash installed!</div>
  </div>  
  <br style="clear: both" />
<cfoutput><cfset mnum=6></cfoutput>
<script type="text/javascript">
$(function() {
    // Setup flash version
$("#flash_uploader").pluploadQueue({
    // General settings
    runtimes : 'flash',
    url : '../upload.cfc?method=upload',
    max_file_size : '1mb',
    max_file_count: <cfoutput>#mnum#</cfoutput>, // You can limit the num of files that can be uploaded by manipulating the mnum variable above
    unique_names : false,
    multiple_queues : true,
    multi_selection: true,
    filters : [
        {title : "Image files", extensions : "jpg,gif,png"}
    ],
    init : {
        FilesAdded: function(up, files) {
            plupload.each(files, function(file) {
            if (up.files.length > <cfoutput>#mnum#</cfoutput>) {
                up.removeFile(file);
                }
            });
            if (up.files.length >= <cfoutput>#mnum#</cfoutput>) {
                $('#pickfiles').hide('slow');
            }
        },
        FilesRemoved: function(up, files) {
            if (up.files.length < 1) {
                $('#pickfiles').fadeIn('slow');
            }
        }
    },
    resize : {width : 300, height : 10000, quality : 90}, // forces images to be resized to a width of 300px if wider than 300px
    preinit: attachCallbacks,
    UploadComplete: function(up, file, response) {
        if ($("#result").length > 0){
            $("#results").prepend(info.response);
        } else {
            $("#flash_uploader").after("<div id='results'>"+info.response+"</div>");
        }
    },
    flash_swf_url : '../../js/plupload.flash.swf'
});
});
// Where should we go after upload
function attachCallbacks(Uploader){
    Uploader.bind('FileUploaded', function(Up, File, response){
        function IsJson(response) {
        alert('Response from server: ' + response.file); // for testing only
        counter++
        var newRow = '<tr><td><input type="hidden" name="file_'+counter+'" value="'+response.file+'">'
        newRow += 'Label the file: '+response.file+' <input type="text" name="filename_'+counter+'"></td></tr>'
        $("#detail").append(newRow)
    }});
};
</script>
<div id="results"></div>
<table id="detail">
</table>
<cfif IsDefined('response')><cfdump var="#response#"></cfif>
</body>
</html>

このバックエンド処理ページ-upload.cfc

<cfcomponent>
  <cffunction name="upload" access="remote" returntype="struct" returnformat="json" output="false">
    <cfscript>
      var uploadDir = expandPath('/uploads/'); // should be a temp directory that you clear periodically to flush orphaned files 
      var uploadFile =  uploadDir & arguments.NAME;
      var response = {'result' = arguments.NAME, 'id' = 0};
      var result = {};
    </cfscript>     

    <!--- save file data from multi-part form.FILE --->
    <cffile action="upload" result="result" filefield="FILE" destination="#uploadFile#" nameconflict="overwrite"/>

    <cfscript>
      // Example: you can return uploaded file data to client 
      response['size'] = result.fileSize;
      response['type'] = result.contentType;
      response['saved'] = result.fileWasSaved;
      return response;
    </cfscript>
  </cffunction>
</cfcomponent>

上記の例をここで試すことができます:[url] www.turn2cash.co.uk/plupload/examples/jquery/queue_widget.cfm [/ url]

上記のように、スクリプトは、mnum変数によって決定される最大6つの画像(この場合)をアップロードする場合にうまく機能します。私が助けを必要としているのは、アップロードされたファイルにアクセスし(ページを更新して)、それらを操作できるようにする方法です。

私はここで私が何をしているのか(cffileuploadを使用して)の例を設定しました[url] www turn2cash.co.uk/a/index.cfm [/ url]これは正常に機能しますが、ページの更新が必要です。避けようとしています。

できる限りの支援を提供してください。

2012年9月7日追加

私はミゲルによって提案された両方の方法を試しましたが、肯定的な結果は得られませんでした。それらは実際にUIをまったくまきませんでした。しかし、私はこれを見つけて試しました:

preinit: attachCallbacks,
        UploadComplete: function(up, file, response) {
            if ($("#result").length > 0){
                $("#results").prepend(info.response);
            } else {
                $("#flash_uploader").after("<div id='results'>"+info.response+"</div>");
            }
        },
        flash_swf_url : '../../js/plupload.flash.swf'
    });
});
// Where should we go after upload
function attachCallbacks(Uploader){
    Uploader.bind('FileUploaded', function(Up, File, Response){
        alert('Response from server: ' + Response.response);
});
};
</script>

次のようなアラートが表示されます。

Response from server: {"saved":true,"result":"home.png","id":"0","size":"5988","type":"image"}

これは、少なくともcfcスクリプトが機能していて、「response」変数が返されていることを証明します。jquery、ajax、またはjavascriptの知識がないため、この情報をどのように利用するかはまだわかりません。できれば助けてください。

4

1 に答える 1

0

前に投稿したリンクにはサンプルコードがあります。これを回答として投稿して申し訳ありませんが、担当者がいないためコメントできません。

あなたの混乱の一部はリクエスト処理にあると思います。例の最後にこのコード行があります。

<cfif IsDefined('response')><cfdump var="#response#"></cfif>

ファイルのアップロードのためにサーバーにjavascript ajax呼び出しを行う前にcoldfusionページが処理されるため、これは決して起動しません。javascript で応答を処理する必要があります。

attachCallbacks 関数からこのアラートが表示されていますか?

alert('Response from server: ' + response.file); // for testing only
于 2012-09-05T13:35:47.330 に答える