在R functon中,我使用fileName
作为参数来读取和处理该文件中存在的csv数据。我使用rook
包将R与javascript集成。
在javascript中,我使用以下代码来获取导入文件的文件名。
<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) {
}
});
}
由于此方法仅传递文件名而不是完整文件路径,因此我不会在R中获得输出。因此,我需要做哪些修改才能获得准确的输出。 我使用以下R代码:
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")
-----
-----
}
答案 0 :(得分:9)
rook code
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>