рдирдорд╕реНрддреЗ,
рдЬрдм рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓> 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
рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рд╕реАрдорд╛ рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реВрдБ? (рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ "рдЕрдиреБрд░реЛрдз" рдкреИрдХреЗрдЬ рдХреЗ рдХрд╛рд░рдг рд╣реИ - рдХреНрдпрд╛ рдореБрдЭреЗ рдбреЗрдЯрд╛ рдХреЛ рдорд▓реНрдЯреАрдкрд╛рд░реНрдЯ рдХрд░рдирд╛ рд╣реИ?
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>
рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдмрд╕ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдирдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рднрд╛рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдкрд╛рдпрдерди рд╣реИрдВред рдпрд╣ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд░реНрд▓ рдХреЙрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдореИрдВрдиреЗ 160 рдПрдордмреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рд╛