Я создаю приложение для загрузки файла PDF с внешнего сервера. Я написал следующий код:Загрузить PDF-файл с помощью адаптера MobileFirst
На Backend сервере Ниже приведен метод:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces("application/pdf")
public Response download() {
ResponseBuilder response = Response.ok((Object) new File("myFile.pdf"));
response.header("Content-Disposition", "attachment; filename=myFile.pdf");
Response responseBuilder = response.build();
return responseBuilder;
}
Я называю этот метод отдыха от моего адаптера, как:
function downloadFile(){
var input = {
method : 'post',
returnedContentType : "plain",
path : "getfiles",
body : {
contentType : 'application/json;charset=utf-8',
content : JSON.stringify({username: "testuser"})
}
};
var response = WL.Server.invokeHttp(input);
return response;
}
После завершения вызова I am получать следующий ответ от этой услуги:
{
"errors": [
],
"info": [
],
"isSuccessful": true,
"responseHeaders": {
"Content-Disposition": "attachment; filename=myFile.pdf",
"Content-Length": "692204",
"Content-Type": "application\/pdf",
"Date": "Thu, 15 Oct 2015 15:19:56 GMT",
"X-Powered-By": "Servlet\/3.0"
},
"responseTime": 11,
"statusCode": 200,
"statusReason": "OK",
"text":"%PDF-1.6\n%����\n159 0 obj\n<<\/Linearized 1\/L 692204\/O 162\/E 156949\/N 25\/T 691602\/H [ 531 579]>>\nendobj\n"
--long lines of characters in text field.
}
Как я могу разобрать этот ответ на PDF-файл и показать его пользователю? Кроме того, я получаю этот ответ, когда я правой кнопкой мыши на адаптер и выберите работать как «вызов мобильного адаптера», когда я просто называю этот метод адаптера из приложения, используя следующий код:
var invocationData = {
adapter : "MyAdapter",
procedure: "downloadFile",
parameters: []
};
WL.Client.invokeProcedure(invocationData, {
onSuccess: downloadFileOK,
onFailure: downloadFileFAIL,
onConnectionFailure: disconnectDetect
});
Я получаю тот же ответ на консоль браузера, но мой метод «OnFailure» «downloadFileFAIL» вызывается.
Редактировать Ниже журнал, который выходит напечатанный в браузере консольных:
R\n>>\nstartxref\n451945\n%%EOF","errors":[],"isSuccessful":true,"statusReason":"OK","responseHeaders":{"Date":"Thu, 15 Oct 2015 21:52:40 GMT","Content-Length":"453132","Content-Disposition":"attachment; filename=myFile.pdf","Content-Type":"application\/pdf","X-Powered-By":"Servlet\/3.0"},"warnings":[],"responseTime":15,"totalTime":151,"info":[]}
worklight.js:5356 Procedure invocation error.WL.Logger.__log @ worklight.js:5356
worklight.js:5360 Uncaught Exception: Uncaught SyntaxError: Unexpected number at (compiled_code):3879WL.Logger.__log @ worklight.js:5360
worklight.js:3879 Uncaught SyntaxError: Unexpected number
worklight.js:5992 Local storage capacity reached. WL.Logger will delete old logs to make room for new ones.
worklight.js:5356 Piggybacking event transmission
worklight.js:5356 Flush called
Edit2
Ниже приведены ссылки на проект и его ресурсы:
Где вы тестирования это? настольный браузер или устройство? Не ожидайте, что он будет работать одинаково! Браузер - это не то же самое, что и устройство. В устройстве вы должны обработать ответ с помощью Cordova, получить доступ к файловой системе устройства или сохранить ответ в JSONStore -> где вы храните ответ? HTML5 локальное хранилище? Он имеет только емкость 5 МБ ... вместо этого используйте JSONStore. –
Я использую браузер рабочего стола. Но еще одна вещь заключается в том, что метод успеха не вызывается, даже если ответ в порядке. –
"statusCode": 20 и "statusReason": "OK" ... я что-то упустил? Можете ли вы указать мне на ошибку? –