Ошибка загрузки файла Mendeley API

Я пытаюсь использовать API Mendeley для загрузки файла, прикрепленного к ресурсу (документу). Я следую документации для разработчиков здесь: https://dev.mendeley.com/methods/#downloading-a-file Похоже, это должно быть довольно просто. Я разобрался с потоком Oauth и могу извлечь все свои документы из библиотеки Mendeley. Я также могу получить идентификатор прикрепленного файла для данного документа.

Когда я пытаюсь использовать этот идентификатор для извлечения файла (в данном случае pdf), он терпит неудачу. Я скопировал параметры в почтальон, и там все работает нормально. Но когда я пытаюсь сделать это в своем приложении Ruby-on-rails с помощью javascript, это не удается.

Я новичок, когда дело доходит до javascript, поэтому я вполне могу упустить что-то очевидное.

Вот фрагмент кода javascript:

downloadFile = (json) => {
        this.getAuthCode();
        this.provideToken = (token) => {
            const access_token = token;
            var myHeaders = new Headers();
            myHeaders.append("Authorization", `Bearer ${access_token}`);
            var requestOptions = {
                method: 'GET',
                headers: myHeaders,
            };
            fetch(`https://api.mendeley.com/files/${json[0].id}`, requestOptions).then(resp => {
                console.log(resp)
            })
        }
    }

Аргумент json представляет собой массив файлов, связанных с документом. Кажется, все работает нормально, пока сервер Mendeley не перенаправит URL-адрес хранилища AWS S3 для рассматриваемого файла. Вот вывод консоли разработчика Chrome:

 `Response {type: "cors", url: "https://mendeley-files.s3.amazonaws.com/31/9f/319f…09d6b8443d1e734fad70c551e37a0a3497b42c69fd0796c91", redirected: true, status: 400, ok: false, …}
body: (...)
bodyUsed: false
headers: Headers
__proto__: Headers
ok: false
redirected: true
status: 400
statusText: "Bad Request"
type: "cors"
url: "https://mendeley-files.s3.amazonaws.com/31/9f/319fe16b678cc65092ef5aa732b3e4c137f272f3?response-content-disposition=attachment%3Bfilename%3D%222003-Psychometric_properties_of_student_ratings_of_instruction_in_online_and_on-campus_courses.pdf%22&response-content-type=application%2Fpdf&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEOz%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCWV1LXdlc3QtMSJIMEYCIQCP0qEL1EJeGKIBVmxX2FaPIZftcmqiW%2FzgDY5ysRs25AIhAMM6q3YzWSubSnuuXOs9gi8voOZ%2BRrkQS343IkihJka1KvYDCDUQAhoMMTA4MTY2MTk0NTA1Igx2zsOuUuv1h6V8cw0q0wMNdVy5izfbA30MysjiNXG3V%2F21aHfn2xXF8ZKq74%2FAbDUbTzKfFWuN79ARNbEyeGinrXdlRXb%2FlEP9ZRgb6xh1%2BtCBtpqT8esZmdZcERC%2Fpup8dtd8q%2BWeCxVKVIyYZffZJvJW1wQOONhMJnfpb751Lr1pTN%2BAu38q8Dky8sOB%2B%2FyH0xOXbP5S0IFErM0B1Ac7eJLOTLrrzwuQ17Z1ZF%2FN5ZenKtV5rrIRR8RU0%2FnzY6EQip1LIHy7l%2F0rN9srGyM1n3fT5trqKL7H6mi79ZlbN0RJ%2FZAtO6pWTL6DbpFzrlCTt6fI%2B2UqdEDrVBO4QT8ROYnd8dYd%2F3hrB1%2BOjuugRDRE6tUehgn9lnFWUndww0XHOWUq8GWAOImeBts7fazUmcCv8lzhH09FYwbcaOKghr6HhJko5UUpeGV4TjMVCA1wUZ4G3DBBVTUIKBLbve0oWFexVFj2J380neGXywdPbEzUcp5o6N%2FEGOW5nMJHlwIquMDubiwgrQ5ANES6RhuO%2BBQTHuy9JdL2KrfhEHA3UJBm6T4Azg1XgEIpXo84Hs7cc2x7ewZ6CPUyzXcc%2Bx72u1o6RwoE12AKdp%2BwqZK4NnFmn6jXKKCSShgmVuqUr3ARVTDmy%2Bb1BTruAQmSrzEXqXzi5Ut4AWjWCEMvw4mB5Yk8W6v5V6YTRtwp8ebqI9Q4hzfMT62ko1AQsBwhKX8anZTIvDVpImcjbUQnaWVGKehj0OGVOb%2FnCn3JXZRq2bCKfQ2Mf7YxlWSHIy9CWqZiW4uTpdSfk5kOOnYQhrKhHQJc%2BM%2F7BldOy72AVgikcmvQdR3k315KNwh%2BJ96ci4LvRa%2BiXw5stATLCQCSKWPYCRonCighfGxNoAyWvvuTkjaQe3bm6X64Giwm2qyyAso05hnC3gotbefpEFNjx2%2Brgm2G%2FzNwdKkr2I%2BFy%2BnGXVNNG2ruh2DMVOw%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200511T205618Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=ASIARSLZVEVE5V2CTSJF%2F20200511%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=96b2a6673ab742909d6b8443d1e734fad70c551e37a0a3497b42c69fd0796c91"
__proto__: Response
arrayBuffer: ƒ arrayBuffer()
blob: ƒ blob()
body: (...)
bodyUsed: (...)
clone: ƒ clone()
formData: ƒ formData()
headers: (...)
json: ƒ json()
ok: (...)
redirected: (...)
status: (...)
statusText: (...)
text: ƒ text()
type: (...)
url: (...)
constructor: ƒ Response()
Symbol(Symbol.toStringTag): "Response"
get body: ƒ body()
get bodyUsed: ƒ bodyUsed()
get headers: ƒ headers()
get ok: ƒ ok()
get redirected: ƒ redirected()
get status: ƒ status()
get statusText: ƒ statusText()
get type: ƒ type()
get url: ƒ url()
__proto__: Object`

Он явно находит нужный файл, но не может его загрузить. Когда я запускаю его в почтальоне, он загружает файл.

Я пытался добавить различные заголовки, которые отображаются в Postman как «скрытые», но я получаю в основном тот же ответ. Любые мысли или направления по этому поводу будут очень признательны. Оставайтесь в безопасности!


person Xswede    schedule 11.05.2020    source источник


Ответы (1)


Справочная документация: https://dev.mendeley.com/code/core_quick_start_guides.html#file_download

Это работает для меня:

async function getFile(fileId) {
  const url = `https://api.mendeley.com/files/${fileId}`;
  const res = await superagent.get(url).auth(accessToken, { type: 'bearer' });
  const [fileUrl] = res.redirects;
  return fileUrl;
}
person user2386601    schedule 31.07.2020