Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var ecg_id = document.getElementById('ecg_id_field')
- var sample_frequency = document.getElementById('sample_frequency_field')
- var amplitude_resolution = document.getElementById('amplitude_resolution_field')
- var fileInput = document.getElementById('ecg_file_select')
- var uploadBtn = document.getElementById('check_and_upload')
- const csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value;
- //если crypto.subtle по той или иной причине не поддерживается подключить CryptoJS
- if (crypto.subtle == undefined) {
- var CryptoJS_script = document.createElement('script');
- CryptoJS_script.type = 'text/javascript';
- //необходимо подключить только необходимые модули долгая загрузка https://cdnjs.com/libraries/crypto-js
- CryptoJS_script.src = "https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js";
- //CryptoJS_script.integrity="sha512-nOQuvD9nKirvxDdvQ9OMqe2dgapbPB7vYAMrzJihw5m+aNcf0dX53m6YxM4LgA9u8e9eg9QX+/+mPu8kCNpV2A==";
- //CryptoJS_script.crossorigin="anonymous";
- document.head.appendChild(CryptoJS_script);
- }
- function arrayBufferToWordArray(ab) {
- var i8a = new Uint8Array(ab);
- var a = [];
- for (var i = 0; i < i8a.length; i += 4) {
- a.push(i8a[i] << 24 | i8a[i + 1] << 16 | i8a[i + 2] << 8 | i8a[i + 3]);
- }
- return CryptoJS.lib.WordArray.create(a, i8a.length);
- }
- function CryptoJS_Get_Sha1_FromFile(inputFile){
- var hash;
- var reader = new FileReader();
- reader.onload = (function(result) {
- return async function(e) {
- var arrayBuffer = e.target.result;
- result = CryptoJS.SHA1(arrayBufferToWordArray(arrayBuffer));
- };
- })(hash);
- reader.readAsArrayBuffer(inputFile);
- return Array.prototype.map.call(new Uint8Array(hash), x=>(('00'+x.toString(16)).slice(-2))).join('');
- }
- async function getFileHash_crypto(inputFile, hashAlgorithm){
- var hash;
- var reader = new FileReader();
- //назначение действия после полного чтения файла
- reader.onload = (function(result) {
- return async function(e) {
- //создание хеша средствами браузера может не поддерживаться в старых браузерах(или если соединение не https)
- result = await crypto.subtle.digest(hashAlgorithm, e.target.result);
- };
- })(hash);
- //чтение файла
- reader.readAsArrayBuffer(inputFile);
- //преобразование ArrayBuffer к строке
- return Array.prototype.map.call(new Uint8Array(hash), x=>(('00'+x.toString(16)).slice(-2))).join('');
- }
- async function getSHA_1FromFile(inputFile) {
- //использовать CryptoJS если crypto.subtle не поддерживается
- if (crypto.subtle == undefined) {
- return CryptoJS_Get_Sha1_FromFile(inputFile);
- } else {
- return await getFileHash_crypto(inputFile, 'SHA-1');
- }
- }
- document.getElementById('ecg_upload_form').addEventListener("submit", async function(evt) {
- //запрет стандартного действия после нажатия sumbit
- evt.preventDefault();
- //получение хеша файла
- const fileHash = await getSHA_1FromFile(fileInput.files[0]);
- //разделение имени файла на несколько подстрок для получения расширения файла
- var splitFileName = fileInput.files[0].name.split('.');
- //добавить вывод ошибки если файл не имеет расширения
- if (splitFileName.length < 2) {
- return;
- }
- //формирование post запроса
- var formData = new FormData();
- formData.append('ecg_id_field', ecg_id.value);
- formData.append('sample_frequency_field', sample_frequency.value);
- formData.append('amplitude_resolution_field', amplitude_resolution.value);
- formData.append('file_format', splitFileName[splitFileName.length - 1]);
- formData.append('file_hash', fileHash);
- axios({
- method: "post",
- url: document.URL,
- data: formData,
- headers: { "Content-Type": "multipart/form-data", "X-CSRFToken": csrftoken},
- })
- .then(function (response) {
- //handle success
- console.log(response);
- })
- .catch(function (response) {
- //handle error
- console.log(response.response);
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment