2013-05-10 30 views
6

Trong một functon R, tôi đã sử dụng fileName làm tham số để đọc và xử lý dữ liệu csv có trong tệp đó. Tôi đã sử dụng gói rook để tích hợp R với javascript. Trong javascript tôi đã sử dụng đoạn mã sau để lấy tên tệp của tệp đã nhập.chuyển tên tệp thành R từ javascript bằng gói Rook

<form id='importPfForm'> 
<input type='file' name='datafile' size='20'> 
<input type='button' value='IMPORT' onclick='importPortfolioFunction()'/> 
</form> 

function importPortfolioFunction(arg) { 
    var f = document.getElementById('importPfForm'); 
    var fileName= f.datafile.value; 

    $.ajax({ 
     type : "POST", 
     url : 'http://localhost:'+portNo+'/custom/Ralgotree/hBasedFileImport?fileName='+fileName, 
     dataType : "json", 
     data : '{ "method" : "hBasedFileImport", "clientId": "31d0c653-d7e5-44b6-98b5-8c084f99514a", "version": 0 }', 
     xhrFields: { 
      withCredentials: false 
     }, 
     beforeSend : function(xhr) {}, 
     success : function(data, textStatus, xmLHttpRequest){ 
     }, 
     error : function(xhr, ajaxOptions, thrownError) { 
     } 
    });  
} 

Bởi vì phương pháp này đi chỉ có tên tập tin thay vì đường dẫn tập tin đầy đủ, tôi sẽ không nhận được đầu ra trong R. Vì vậy, những gì thay đổi tôi cần phải làm để có được kết quả chính xác. Tôi đang sử dụng mã R sau:

s <- Rhttpd$new() 
    s$add(
    name="Ralgotree", 
    app=Rook::URLMap$new(
    '/hBasedFileImport' = function(env){ 
     req <- Rook::Request$new(env) 
     params <- Utils$parse_query(env$QUERY_STRING); 
     res <- Rook::Response$new(headers = list("Content-Type"="application/json" , "Access-Control-Allow-Origin"="*")) 
     res$write(toJSON(hBasedFileImport(toString(params["fileName"])))) 
     res$finish() 
     } 
) 
) 
    s$start(port = 9000) 


hBasedFileImport <- function(fileName){ 
    portData <- read.csv(fileName,sep="\t") 
    ----- 
    ----- 
} 

Trả lời

9

đang rook đang

app=Rook::URLMap$new(
     'hBasedFileImport'= function(env){ 
     req <- Rook::Request$new(env) 
     res <- Rook::Response$new() 
     if (!is.null(req$POST())){ 
      print("post method") 
      data <- req$POST()[['file']] 
      #print(data) 
      Ralgotree::hBasedFileImport(toString(data$tempfile)) 
     } 
     res$finish() 
     }, 

JS:

<form id="uploadform" method="post" enctype="multipart/form-data" action="http://'+ip+':'+portNo+'/custom/Ralgotree/hBasedFileImport"><font size="2"><table bgcolor="#D2DFEF"><tr><td>select file</td><td><input name="file" id="file" size="27" type="file" /></td></tr><tr><td></td><td><input type="submit" name="action" value="UPLOAD" /> <input type="button" value="CANCEL" onclick="cancelImport();"/></td></tr><tr><td></td><td><span id="status" style="display:none">uploading...</span><iframe id="target_iframe" name="target_iframe" src="" style="width:0;height:0;border:0px"></iframe></td></tr></table></font></form> 
Các vấn đề liên quan