Zenodo: рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рд╕рд┐рддре░ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: zenodo/zenodo

рдирдорд╕реНрддреЗ,

рдЬрдм рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓> 100 рдПрдордмреА рдкрд╛рдпрдерди рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЬрд╝реЗрдиреЛрдбреЛ рдПрдкреАрдЖрдИ (рд╕реИрдВрдбрдмреЙрдХреНрд╕) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ:

data = {'filename': 'test.zip'}
files = {'file': open(filename, 'rb')}
r = requests.post("https://sandbox.zenodo.org/api/deposit/depositions/%s/files?access_token=TOKEN" % deposition_id, data=data, files=files)

рдпрд╣ http рддреНрд░реБрдЯрд┐ рдХреЛрдб 413 ("413 рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдПрдВрдЯрд┐рдЯреА рдЯреВ рд▓рд╛рд░реНрдЬ" рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдЬрд╝реЗрдиреЛрдбреЛ рдПрдкреАрдЖрдИ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИ)ред

рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд╣реА рдХреЛрдб <100 рдПрдордмреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ 201 рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реВрдБ? (рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ "рдЕрдиреБрд░реЛрдз" рдкреИрдХреЗрдЬ рдХреЗ рдХрд╛рд░рдг рд╣реИ - рдХреНрдпрд╛ рдореБрдЭреЗ рдбреЗрдЯрд╛ рдХреЛ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдХрд░рдирд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдмрд╕ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдирдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рднрд╛рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдкрд╛рдпрдерди рд╣реИрдВред рдпрд╣ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд░реНрд▓ рдХреЙрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдореИрдВрдиреЗ 160 рдПрдордмреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рд╛

import requests

r = requests.post('https://sandbox.zenodo.org/api/deposit/depositions',
                        params={'access_token': ACCESS_TOKEN}, json={},
                        headers={"Content-Type": "application/json"})

print r.status_code

bucket_url = r.json()['links']['bucket']

filename='bigfile.txt'
r = requests.put('%s/%s' % (bucket_url,filename),
                data=open(filename, 'rb'),
                headers={"Accept":"application/json",
                "Authorization":"Bearer %s" % ACCESS_TOKEN,
                "Content-Type":"application/octet-stream"})

print r.status_code

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

100MB рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдирдИ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб API (рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрднреА рддрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП application/mulitpart-formdata рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рдХреБрд╢рд▓ рдирд╣реАрдВ рд╣реИред рдирдП рдПрдкреАрдЖрдИ рдореЗрдВ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреА рдмрд╛рдЗрдирд░реА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдкреБрдЯ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдЫреЛрд░ рдореЗрдВ рдХрд┐рд╕реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ/рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЖрдЬ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рднреЗрдЬреВрдВрдЧрд╛ред

рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдирдП рдПрдкреАрдЖрдИ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗрдХрд░ рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред
рд╢рд╛рдпрдж рдЖрдк рдЕрдЬрдЧрд░ рдкреИрдХреЗрдЬ "рдЕрдиреБрд░реЛрдз-рдЯреВрд▓рдмреЗрд▓реНрдЯ" рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдлреЙрд░реНрдо-рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ:

1) рдЕрдкрдирд╛ рдмрдХреЗрдЯ URL рдЦреЛрдЬреЗрдВ:

$ curl -H "Accept: application/json" -H "Authorization: Bearer <access token>" "https://www.zenodo.org/api/deposit/depositions/<deposit id>"
{
  "links": {
    "bucket": "https://www.zenodo.org/api/files/<bucket id>",
    ...
  },
...

2) рдмрд╛рд▓реНрдЯреА рдореЗрдВ рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ

$ curl -X PUT -H "Accept: application/json" -H "Content-Type: application/octet-stream" -H "Authorization: Bearer <access_token>" -d @<path to local file> https://www.zenodo.org/api/files/<bucket id>/<filename>

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд▓реНрдЯреА рд╕рдВрд╕реНрдХрд░рдгрдмрджреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдмрд╛рд▓реНрдЯреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рд╕реЗ рдЦреЛрдЬреЗрдВ:

$ curl -H "Accept: application/json" -H "Authorization: Bearer <access token>" "https://www.zenodo.org/api/files/<bucket id>тАЭ
{
  "contents": [
    {
      "links": {
        "version": "https://zenodo.org/api/files/<bucket id>/<filename>?versionId=<versionId>", 
        ...
      }, 
      "key": "<filename>", 
      ...
    }, 
   ...

рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдирд╛:

$ curl -X DELETE -H "Accept: application/json" -H "Authorization: Bearer <access_token>" https://www.zenodo.org/api/files/<bucket id>/<filename>?versionId=<versionId>тАЭ

рдмрд╕ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдирдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рднрд╛рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдкрд╛рдпрдерди рд╣реИрдВред рдпрд╣ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд░реНрд▓ рдХреЙрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдореИрдВрдиреЗ 160 рдПрдордмреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рд╛

import requests

r = requests.post('https://sandbox.zenodo.org/api/deposit/depositions',
                        params={'access_token': ACCESS_TOKEN}, json={},
                        headers={"Content-Type": "application/json"})

print r.status_code

bucket_url = r.json()['links']['bucket']

filename='bigfile.txt'
r = requests.put('%s/%s' % (bucket_url,filename),
                data=open(filename, 'rb'),
                headers={"Accept":"application/json",
                "Authorization":"Bearer %s" % ACCESS_TOKEN,
                "Content-Type":"application/octet-stream"})

print r.status_code

@lnielsen @jakelever
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ requests.put рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЦрдВрдбрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рд▓реНрдЯреА рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рд╕рдВрджрд░реНрдн:
рдореЗрд░реЗ рдкрд╛рд╕ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕реНрдореГрддрд┐ рдореЗрдВ рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╝рд┐рдкрдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдП рдмрд┐рдирд╛ рдЬрд╝рд┐рдкрд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХреЗ рдСрдХреНрдЯреЗрдЯ-рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЬреЗрдирд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИред рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдкреАрдЖрдИ рд╡рд┐рдлрд▓ рд░рд╣реА рдХреНрдпреЛрдВрдХрд┐ 986 рдХреЗрдмреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЖрдзрд╛ рд╣реА рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рднреНрд░рд╖реНрдЯ рдкреАрдбреАрдПрдл рд╣реЛ рдЧрдпрд╛ рдерд╛ред http://killtheradio.net/tricks-hacks/curl-cli-not-sending-full-file-data-when-using-data-binary/ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВрдиреЗ -d @<path to file> рдХреЛ -T <path to file> рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

CristianCantoro picture CristianCantoro  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lnielsen picture lnielsen  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

slint picture slint  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wetneb picture wetneb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

minygd picture minygd  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ