我正在尝试执行 GET
从 URL 检索数据,然后执行 POST
到 RESTful api。 get 调用似乎工作正常,但服务器在 file
参数中看不到任何内容。我已验证 GET
调用返回 pdf 流数据,并将其放置在 FormData
arg 中。
这是完整的调用
function upload(key, url){
var file;
/* get data from url */
$.ajax({
url: url,
type: 'GET',
async: false,
cache: false,
dataType : 'text',
contentType : 'application/pdf',
success: function( data ) {
file = data;
},
error: function(xhr, status, error) {
console.log("error logging: "+ error);
}
});
/* send data to api */
var data = new FormData();
data.append("key", key);
data.append("file", file); //<-- this has pdf stream data
$.ajax({
url: ROOT_URL + "/api/account/upload",
type: 'POST',
cache: false,
async: false,
enctype: 'multipart/form-data',
processData: false,
contentType: false,
data: data,
success: function( data ) {
console.log("Uploaded!");
},
error: function(xhr, status, error) {
console.log("error logging: "+ error);
},
dataType: "json"
});
};
这里是服务器端(grails + spring + jaxrs)
@POST
@Path('upload')
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces('application/json')
String upload(@Context HttpServletRequest request){
GrailsWebRequest w = WebUtils.retrieveGrailsWebRequest()
MultipartFile multipartFile = w.getRequest().getFile('file');
println("request:" + request)
println("multipartFile:" + multipartFile)
println("parameterMap:" + w.getRequest().getParameterMap() )
return ['okay':'uploaded'] as JSON
}
当前打印出:
request:org.grails.jaxrs.web.RequestWrapper@448593df
multipartFile:null
parameterMap:[file:[], key:[c07fc0974ebb4f3a8fc21e3d002152d4]]
最佳答案
看起来当 POST 调用发生时,变量文件还没有值。由于您希望 GET 调用后的所有操作都在服务器返回数据后发生,因此您应该将该代码移至成功时调用的单独函数中。
关于javascript - 使用 GET 将数据 POST 到 Restful api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501793/