2012-01-17 2 views
1

아래 코드로 plupload으로 파일을 업로드하면 방화 벽 콘솔에 POST/uploads 200 OK 8192ms 메시지가 표시됩니다. 텍스트의 색상은 빨간색입니다. 터미널 출력을 살펴보면 완료되었습니다. 7653ms에 200 OK를 입력하십시오.. 가 레일 3 및 plupload - 업로드 후 어떻게 리디렉션합니까?

def create 
    @upload = Upload.new(:upload => params[:file]) 

    if @upload.save 
     head 200 
     #redirect_to '/users' 
    else 
     render :action => "new" 
    end 
    end 

가 어떻게 모든 페이지에 리디렉션을 할 수

: 작업이를 만들 업로드 컨트롤러에서

var uploader = new plupload.Uploader({ 
    runtimes: 'gears,html5,flash,silverlight,browserplus', 
    browse_button: 'pickfiles',  
    autostart : true,  
    max_file_size: '10mb', 
    url: '/uploads', 
    resize: { width: 320, height: 240, quality: 90 }, 
    flash_swf_url: '/Scripts/pl/plupload.flash.swf', 
    silverlight_xap_url: '/Scripts/pl/plupload.silverlight.xap', 
    filters: [ 
    { title: "Image files", extensions: "jpg,gif,png" }, 
    { title: "Zip files", extensions: "zip" } 
] 
}); 
uploader.bind('Init', function (up, params) { 
    $('#filelist')[0].innerHTML = "<div>Current runtime: " + params.runtime + "</div>"; 
}); 
uploader.bind('Error', function (up, err) { 
    $('#filelist').append("<div>Error: " + err.code + 
     ", Message: " + err.message + 
     (err.file ? ", File: " + err.file.name : "") + 
     "</div>" 
    ); 

}); 
uploader.bind('FilesAdded', function (up, files) { 
    for (var i in files) { 
     $('#filelist')[0].innerHTML += '<div id="' + files[i].id + '">' + files[i].name + ' (' + plupload.formatSize(files[i].size) + ') <b></b></div>'; 
    } 
    //uploader.start(); 
}); 
$('#uploadfiles').click(function (e) { 
    uploader.start(); 
    e.preventDefault(); 
}); 

uploader.bind('UploadProgress', function (up, file) { 
    $('#' + file.id)[0].getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>"; 
}); 

uploader.init(); 

이 보인다? 가능한 한 알 수 있듯이 사용자 사용자에게 업로드를 완료 한 후 리디렉션을 시도했지만 불행히도 아무 일도 일어나지 않습니다. 액션을 작성하는 경우 head 200 행이 발생하므로 아무 일도 일어나지 않습니다.

누구든지 도와 드릴 수 있습니까? 업로드를 마친 후 다른 페이지로 리디렉션하려면 어떻게해야합니까? Google에서 검색하려고했지만 아무 것도 찾지 못했습니다 ...

그리고 아직 물어보고 싶은데요 - 파일을 업로드 한 후 Firebug 콘솔에 항상있는 이유는 무엇입니까 POST/업로드 200 OK 아무런 로그 메시지가 없습니까?

답변

1

두 가지 옵션 :

uploader.bind('FileUploaded', function(up, file, info) { 
    // Redirect after successful upload 
    window.location = 'http://mysite.com/users'; 
}); 

2) 당신은 또한 당신의 ApplicationController에이 코드를 넣어 레일 리디렉션을시키는 시도 할 수 있습니다 :

1) Plupload 당신이 사용할 수있는 FileUploaded 콜백이 있습니다

# Allows redirecting for AJAX calls as well as normal calls 
    def redirect_to(options = {}, response_status = {}) 
    if request.xhr? 
     render(:update) {|page| page.redirect_to(options)} 
    else 
     super(options, response_status) 
    end 
    end 
당신은 어떤 업로드 런타임에 파일을 업로드하기 때문에 그 방법에 대한 리디렉션을 수행 할 수 없습니다
+0

도움 주셔서 감사합니다. 하지만 약간의 문제가 있습니다. 두 번째 옵션으로 리디렉션하고 싶습니다. 훨씬 더 순수하다고 생각합니다. 그러나 redirect_to 액션을'ApplicationController'에 추가했을 때, 결과는 여전히 동일합니다. 페이지는 리디렉션되지 않습니다. 터미널에 다음 출력이 있습니다. 2012-01-17 15:43:59 +0100 에서 127.0.0.1에 대해 'Started POST "/ uploads"를 업로드합니다. UploadsController #에서 처리 */* ... (0.7ms) COMMIT http://www.google.com 로 리디렉션 됨 완료 됨 302 17250ms에 있음 ' – user984621

0

간접 actio입니다 n. HTML5는 XHR을 사용하고, HTML4는 프록시 iframe을 사용하며, flash/silverlight는 내장 바이트 스트리밍 API를 사용하여 업로드를 수행합니다.

한 번에 하나의 파일 만 업로드하는 경우 유일한 옵션은 FileUploaded 이벤트를 사용하는 것입니다. 세 번째 매개 변수는 모든 런타임에서 서버 응답으로 채워집니다. 당신은 실제로 (iWasRobbed에서 편집 copypasta)처럼 사용한다 : 항상 일반 텍스트, 그것은 유일한 일이 plupload는 여러 가지 런타임에 표준화 할 수 있다는 주어진 수

uploader.bind('FileUploaded', function(up, file, info) { 
    // Redirect after successful upload 
    window.location = info.response; 
}); 

응답은 것이다 그래서 당신의 리디렉션 URL은해야합니다 응답의 본문에 있어야합니다. 보다 복잡한 응답이 필요한 경우 직렬화 된 JSON을 보내고 클라이언트 측에서 파싱 할 수 있습니다.

0

나는 이것이 조금 오래되었음을 알고 있지만, 나는 그 반응을 향상시키고 싶다[email protected] 말한 바탕으로, 내가보기에 이런 짓을 :

uploader.bind('FileUploaded', function(up, file, info) { 
    window.location = info.response; 
}); 

그리고 내 컨트롤러에서 난 그냥 간단한 텍스트와 URL을 렌더링이 도움이 너무

def create 
    # do stuff here 
    render :text => object_path(id: object) 
end 

희망 :

2

나는 window.location javascript 함수로 간단하게 처리 할 수있다. Plupload에는 모든 파일 업로드가 완료 될 때 생성되는 uploadcomplete 이벤트가 있습니다. FileUploaded 이벤트는 단일 파일 업로드 후에 생성됩니다. 따라서 여러 파일을 업로드하려는 경우 uploadcomplete 이벤트가 유용합니다. 업로드자 아이디어는 here에서 가져오고 업로드 완료 이벤트를 추가했습니다. 여기 내 업 로더가 있습니다.

<script type="text/javascript"> 
$(function(){ 
    var uploader = new plupload.Uploader({ 
    runtimes : "html5", 
    browse_button : 'pickfiles', 
    max_file_size : '100mb', 
    url : "/documents", 
    multipart: true, 
    multipart_params: { 
    "authenticity_token" : '<%= form_authenticity_token %>' 
    } 
}); 

uploader.bind('FilesAdded', function(up, files) { 
    $.each(files, function(i, file) { 
    $('#filelist').append(
    '<div id="' + file.id + '">' + 
    'File: ' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>' 

    ); 

    }); 


    }); 

    uploader.bind('UploadProgress', function(up, file) {  

$('#' + file.id + " b").html(file.percent + "%"); 


    }); 

    uploader.bind('UploadComplete', function(up, files) { 
    window.location = '/documents'; 
}); 


    $('#uploadfiles').click(function(e) { 
    uploader.start(); 
    e.preventDefault(); 
    }); 


    uploader.init(); 


    }); 


    </script> 

업로드가 완료되면 업 로더는 업로드 된 모든 문서를 나열하도록 리디렉션합니다.