如何使用MATLAB Web Services向REDCap导入文件?
如何使用MATLAB的
webwrite向REDCap上传文件? 我找不到用MATLAB Web Services向REDCap上传文件的方法。虽然curl可以实现该操作,且REDCap的Import File API明确支持POST请求,但我不清楚如何用MATLAB的webwrite完成这个操作。
我的代码片段如下:
url = 'xxxxx'; % REDCap API地址 token = 'xxxxxx'; % REDCap令牌 filename = 'xxxxx'; % 要上传的文件名 record = '1'; field = 'file'; % 读取文件内容 fid = fopen(filename, 'rb'); if fid==-1 error(['无法打开文件 ' filename]) end data = char(fread(fid)); fclose(fid); ops = weboptions('CertificateFilename', '', 'Debug', false); result = webwrite(url, 'token', token, ... 'content','file', ... 'action', 'import', ... 'record', record,... 'field', field, ... 'file', data, ... 'returnFormat','csv', ops);
关于file参数,REDCap API文档仅说明对应“文件内容”,但未指定格式要求。我也尝试过传入文件名而非文件内容(因为看到其他基于curl的实现用的是文件名),但仍未成功。
执行代码后,REDCap返回403 Forbidden错误:
The server returned the status 403 with message "Forbidden" in response to the request to URL http://172.17.210.219/redcap/redcap/api/.
但我用其他方式上传文件时不存在权限问题。
以下两种依赖curl的实现均能成功:
R语言(依赖httr/curl)
url <- "http://172.17.210.219/redcap/redcap/api/" file <- 'contents.m' formData <- list("token"=token, action='import', content='file', record='1', field='file', event='', returnFormat='json', file=httr::upload_file(file) ) response <- httr::POST(url, body = formData, encode = "multipart") result <- httr::content(response)
MATLAB调用外部curl
dToken = [ ... '-F "token=', redcap_token, '"', ... ' -F "content=file"', ... ' -F "action=import"', ... ' -F "record=', record_num, '"', ... ' -F "event=', varargin{3}, '"', ... ' -F "field=', varargin{4}, '"', ... ' -F "filename=', [this_name, this_ext], '"', ... ' -F "file=@', temp, '"']; unixCmd = ['curl ', hCmd2, ' -X POST ', hCmd2, ' ', dToken, ' ', redcap_url]; [uState, uResultUpload] = system( unixCmd ); % 适用于PC
这两种实现里,curl都是接收文件名,同时向REDCap发送文件名和文件内容。现在想知道如何用MATLAB的webwrite实现文件上传。
内容的提问来源于stack exchange,提问作者gavril0
相关产品推荐
相关产品推荐

