html
JavaScript рдореЗрдВ рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрд░рд╡рд╛рдИ: рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб
рд╕рд╛рдордЧреНрд░реА рддрд╛рд▓рд┐рдХрд╛
- рдкрд░рд┐рдЪрдп - рдкреЗрдЬ 1
- рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдордЭрдирд╛ - рдкреЗрдЬ 2
- рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ - рдкреЗрдЬ 4
- рд╣реИрдВрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛ - рдкреЗрдЬ 6
- рдмреНрд▓реЙрдм рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП API рдХреЙрд▓ рдХрд░рдирд╛ - рдкреЗрдЬ 8
- рд╣реЗрдбрд░реНрд╕ рд╕реЗ рдлрд╛рдЗрд▓ рдирд╛рдо рдирд┐рдХрд╛рд▓рдирд╛ - рдкреЗрдЬ 10
- рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛ - рдкреЗрдЬ 12
- рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╣рдЬрддрд╛ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ - рдкреЗрдЬ 14
- рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдиреБрдХреВрд▓рди - рдкреЗрдЬ 16
- рдирд┐рд╖реНрдХрд░реНрд╖ - рдкреЗрдЬ 18
рдкрд░рд┐рдЪрдп
рдЖрдЬ рдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рдпреБрдЧ рдореЗрдВ, рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рднреАрддрд░ рдлреЛрдЯреЛрдЬрд╝ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЪрд╛рд╣реЗ рдЖрдк рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЙрддрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢реБрд░реБрдЖрддреА рд╣реЛрдВ рдпрд╛ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдВ, рдПрдХ рдордЬрдмреВрдд рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдпрд╣ eBook JavaScript рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдлрд╝реАрдЪрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ API рдХреЙрд▓реНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рддрдХ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдореЗрдХреЗрдирд┐рдЬреНрдо рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рдЕрдВрдд рддрдХ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рд╡реНрдпрд╛рдкрдХ рд╕рдордЭ рд╣реЛрдЧреА, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред
рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдордЭрдирд╛
рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбрд╛рдЙрдирд▓реЛрдб рдлреЛрдЯреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рдХреА рдЖрддреНрдорд╛ рдореЗрдВ, рдпрд╣ рдлреАрдЪрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрд╛рдзрд╛ рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореБрдЦреНрдп рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ: рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп URL рдЬреЛ рд╕реАрдзреЗ рдЙрд╕ рдлреЛрдЯреЛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
- рд╣реИрдВрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╡рд┐рдзрд┐: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред
- рдмреНрд▓реЙрдм рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЗ рд╕рд╛рде API рдХреЙрд▓: рдлреЛрдЯреЛ рдХреЗ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
- рдлрд╛рдЗрд▓ рдирд╛рдо рдирд┐рд╖реНрдХрд░реНрд╖рдг: рдлрд╛рдЗрд▓ рдХреА рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлрд╛рдЗрд▓ рдирд╛рдо рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
- рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди: рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ред
рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдбрд╛рдЙрдирд▓реЛрдб рдлреАрдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдиреАрдВрд╡ рд░рдЦрддрд╛ рд╣реИред
рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛
рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдлреЛрдЯреЛ рдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдлреЛрдЯреЛ ID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд╛рдЙрдирд▓реЛрдб URLs рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбрд╛рдЙрдирд▓реЛрдб рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
1 |
photo.downloadLink = generateDownloadLink(photo.id); |
1 |
const downloadLink = photo.downloadLink; |
1 |
handleDownload(photo.key, downloadLink); |
рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛
1 2 3 4 5 |
return ( <button onClick={() => handleDownload(photo.key, downloadLink)> Download </button> ); |
рд╡реНрдпрд╛рдЦреНрдпрд╛:
- рдбрд╛рдЙрдирд▓реЛрдб рдмрдЯрди handleDownload рд╡рд┐рдзрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдлреЛрдЯреЛ рдХреА рдЕрджреНрд╡рд┐рддреАрдп key рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
рд╣реИрдВрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛
handleDownload рд╡рд┐рдзрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреА рд╣реИред рдпрд╣ API рдХреЙрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ, рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рддреА рд╣реИ, рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд╢реБрд░реВ рдХрд░рддреА рд╣реИред
рд╡рд┐рдзрд┐ рдЕрд╡рд▓реЛрдХрди
1 2 3 4 5 6 7 8 9 10 11 |
const handleDownload = (photoKey, downloadLink) => { console.log(`Download initiated for: ${downloadLink}`); fetchGetBlobDataWithAuth(downloadLink) .then(response => { console.log(response); // Further processing... }) .catch(error => { console.error('Download failed:', error); }); }; |
рдореБрдЦреНрдп рдХрджрдо:
- рдбрд╛рдЙрдирд▓реЛрдб рд╢реБрд░реВрдЖрдд рдХреЛ рд▓реЙрдЧ рдХрд░рдирд╛:
- рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
- API рдХреЙрд▓ рдХрд░рдирд╛:
- fetchGetBlobDataWithAuth рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
- рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛:
- рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред
- рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди:
- рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рддрд╛ рдФрд░ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред
рдмреНрд▓реЙрдм рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП API рдХреЙрд▓ рдХрд░рдирд╛
рдлреЛрдЯреЛ рдХреЗ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА API рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
Fetch рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
1 2 3 4 5 6 7 8 9 |
export const fetchGetBlobDataWithAuth = (downloadLink, authToken) => { return fetch(downloadLink, { method: 'GET', headers: { 'Authorization': `Bearer ${authToken}`, }, responseType: 'blob', }); }; |
рд╡реНрдпрд╛рдЦреНрдпрд╛:
- Authorization: рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- Response Type: 'blob' рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХреЗред
Fetch рд╡рд┐рдзрд┐ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import { fetchGetBlobDataWithAuth } from './path/to/client'; const handleDownload = (photoKey, downloadLink) => { const authToken = getAuthToken(); // Function to retrieve auth token fetchGetBlobDataWithAuth(downloadLink, authToken) .then(response => response.blob()) .then(blob => { // Further processing... }) .catch(error => { console.error('Download failed:', error); }); }; |
рд╣реЗрдбрд░реНрд╕ рд╕реЗ рдлрд╛рдЗрд▓ рдирд╛рдо рдирд┐рдХрд╛рд▓рдирд╛
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╛рдЗрд▓ рдХрд╛ рдореВрд▓ рдирд╛рдо рдФрд░ рдлреЙрд░реНрдореЗрдЯ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рдП, рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╣реЗрдбрд░реНрд╕ рд╕реЗ рдлрд╛рдЗрд▓ рдирд╛рдо рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
Content-Disposition рд╣реЗрдбрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛
1 2 3 4 5 |
const extractFileName = (contentDisposition) => { const regex = /filename="(.+)"/; const matches = regex.exec(contentDisposition); return matches ? matches[1] : 'downloaded_file.jpg'; }; |
рд╡реНрдпрд╛рдЦреНрдпрд╛:
- Regular Expression: рдХреЛрдЯреНрд╕ рдореЗрдВ рдмрдВрдж рдлрд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИред
- Fallback: рдпрджрд┐ рдХреЛрдИ рдореИрдЪ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ 'downloaded_file.jpg' рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред
Extraction рдХреЛ Handle Download рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const handleDownload = (photoKey, downloadLink) => { const authToken = getAuthToken(); fetchGetBlobDataWithAuth(downloadLink, authToken) .then(response => { const contentDisposition = response.headers.get('Content-Disposition'); const fileName = extractFileName(contentDisposition); return response.blob().then(blob => ({ blob, fileName })); }) .then(({ blob, fileName }) => { initiateDownload(blob, fileName); }) .catch(error => { console.error('Download failed:', error); }); }; |
рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛
рдмреНрд▓реЙрдм рдбреЗрдЯрд╛ рдФрд░ рдлрд╛рдЗрд▓ рдирд╛рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдВрддрд┐рдо рдХрджрдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред
URL рдФрд░ Anchor рдЯреИрдЧ рдмрдирд╛рдирд╛
1 2 3 4 5 6 7 8 9 10 |
const initiateDownload = (blob, fileName) => { const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = fileName; document.body.appendChild(a); a.click(); a.remove(); window.URL.revokeObjectURL(url); }; |
рдХрджрдо-рджрд░-рдХрджрдо рд╡реНрдпрд╛рдЦреНрдпрд╛:
- Object URL рдмрдирд╛рдирд╛:
- рдмреНрд▓реЙрдм рдбреЗрдЯрд╛ рдХреЛ рдПрдХ URL рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
- Anchor Element рдмрдирд╛рдирд╛:
- рдбрд╛рдЙрдирд▓реЛрдб рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдЧ рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХрд▓реА рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред
- рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛:
- href: рдСрдмреНрдЬреЗрдХреНрдЯ URL рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
- download: рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
- Anchor рдХреЛ рдЕрдкреЗрдВрдб рдХрд░рдирд╛ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛:
- рдХреНрд▓реАрдирдЕрдк:
- DOM рд╕реЗ рдПрдирдХрд░ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореЗрдореЛрд░реА рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ URL рдХреЛ рд░рд┐рд╡реЛрдХ рдХрд░ рджреЗрддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╣рдЬрддрд╛ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛
рдбрд╛рдЙрдирд▓реЛрдб рдХрднреА-рдХрднреА рдиреЗрдЯрд╡рд░реНрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рдЕрдиреБрдорддрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдордЬрдмреВрдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдПрдХ рд╕реБрдЪрд╛рд░реВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
Catch рдмреНрд▓реЙрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
1 2 3 4 |
.catch(error => { console.error('Download failed:', error); alert('рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ред рдХреГрдкрдпрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред'); }); |
рд╢реНрд░реЗрд╖реНрда рдкреНрд░рдерд╛рдПрдБ:
- Logging: рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рд▓реЙрдЧ рд░рдЦреЗрдВред
- User Feedback: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдЧрд▓реЗ рдХрджрдо рд╕реБрдЭрд╛рдПрдВред
рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдиреБрдХреВрд▓рди
рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рджреЛрдиреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рд╢рд╛рдорд┐рд▓ рд╣реИред
Full-Resolution Photos рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдлреБрд▓-рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди рдлреЛрдЯреЛрдЬрд╝ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- Display рдХреЗ рд▓рд┐рдП рдердВрдмрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
- UI рдореЗрдВ рд▓реЛ-рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди рдЗрдореЗрдЬреЗрдЬрд╝ рджрд┐рдЦрд╛рдПрдВ рддрд╛рдХрд┐ рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреА рдмрдЪрдд рд╣реЛ рд╕рдХреЗред
- Full-Resolution Downloads рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
- рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЗрд╡рд▓ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдЪреБрдирддрд╛ рд╣реИ рддрдм рд╣реА рдЙрдЪреНрдЪ-рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
Pros and Cons
рдкрд╣рд▓реВ | рдлрд╛рдпрджреЗ | рдиреБрдХрд╕рд╛рди |
---|---|---|
Full-Resolution Downloads | рдбрд╛рдЙрдирд▓реЛрдб рдкрд░ рдЗрдореЗрдЬ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ | рдмреИрдВрдбрд╡рд┐рдбреНрде рдЙрдкрдпреЛрдЧ рдФрд░ рд▓реЛрдб рд╕рдордп рдмрдврд╝рд╛рддрд╛ рд╣реИ |
Display рдХреЗ рд▓рд┐рдП рдердВрдмрдиреЗрд▓ | рдкреЗрдЬ рд▓реЛрдб рд╕реНрдкреАрдб рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ | рд╡рд┐рднрд┐рдиреНрди рд░реЗрдЬреЛрд▓реНрдпреВрд╢рди рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реЙрдЬрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ |
рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реЗрдВ
- рдердВрдмрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
- рдЬрдм рдЧреИрд▓рд░реАрдЬ рдпрд╛ рдлреЛрдЯреЛ рдХреА рд╕реВрдЪрд┐рдпрд╛рдБ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВред
- Full-Resolution рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
- рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рдЫрд╡рд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдПрдХ рдордЬрдмреВрдд рдлреЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдлреАрдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдпреЛрдЬрдирд╛ рдФрд░ рдХреБрд╢рд▓ рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИред рдЕрджреНрд╡рд┐рддреАрдп рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдФрд░ API рдХреЙрд▓реНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдлрд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рддреНрд░реБрдЯрд┐-рдореБрдХреНрдд рдбрд╛рдЙрдирд▓реЛрдб рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рддрдХ рдХреЗ рдореБрдЦреНрдп рдШрдЯрдХреЛрдВ рдХреЛ рд╕рдордЭрдХрд░, рдЖрдк рдЕрдкрдиреЗ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╛рдж рд░рдЦреЗрдВ, рдЬрдмрдХрд┐ рддрдХрдиреАрдХреА рдкрд╣рд▓реВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╣рдЬ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдбрд╛рдЙрдирд▓реЛрдбреНрд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ, рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рдФрд░ рд╡реНрдпрд╛рдкрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдмрдирд╛рдП рд░рдЦреЗрдВред рдЗрди рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рди рдХреЗрд╡рд▓ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ рдмрд▓реНрдХрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдФрд░ рдкреЗрд╢реЗрд╡рд░рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рд╣реЛрдВрдЧреЗред
SEO Keywords: Download Photo Action, JavaScript Photo Download, Handle Download Method, Blob Data API, File Name Extraction, Initiate Download, Error Handling in Downloads, Optimize Photo Downloads, JavaScript Download Link, Web Application Photo Management
Note: This article is AI generated.