AZURE Файловый сервис - загрузка PDF через REST API - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь загрузить PDF-файл с запросом Https в Файловую службу (не BLOB-объект) в Azure.

Я создал файл в общей папке, но у меня возникла проблема с содержание файла. Я не знаю, в каком формате мне следует загружать контент.

Я попытался использовать операцию PUT RANGE и отправить тело в виде BASE64. Операция прошла успешно, но PDF не читается. Я также пытался отправить содержимое в двоичном виде, но с тем же результатом.

function uploadFileContentOnAzure(strFileUrl, objInvoicePDF, dtCurrentDate, strGUID, strBinaryPDF){

            var TITLE = 'uploadFileContentOnAzure';

            var intPDFSize = strBinaryPDF.length;
            var intRangeSize = intPDFSize - 1;

            var strRangeToSign = "PUT\n"
                + "\n" // content encoding
                + "\n" // content language
                + intPDFSize+"\n" // content length
                + "\n" // content md5
                + "application/pdf\n" // content type
                + "\n" // date
                + "\n" // if modified since
                + "\n" // if match
                + "\n" // if none match
                + "\n" // if unmodified since
                + "\n" // range
                + "x-ms-date:" + dtCurrentDate + "\nx-ms-range:bytes=0-"+intRangeSize+"\nx-ms-version:2017-07-29\nx-ms-write:update\n" // headers
                + "/" + THIS_SCRIPT.CONSTANTS.AZURE_Account_Name + "/test/"+objInvoicePDF.name+"\ncomp:range"; // resources


            var objSecretKey = null;
            objSecretKey = crypto.createSecretKey({
                guid: strGUID,
                encoding: encode.Encoding.BASE_64
            });
            var objHmac = null;
            objHmac = crypto.createHmac({
                algorithm: crypto.HashAlg.SHA256,
                key: objSecretKey
            });
            objHmac.update({
                input: strRangeToSign,
                inputEncoding: encode.Encoding.UTF_8
            });
            var strSignature = null;
            strSignature = objHmac.digest({
                outputEncoding: encode.Encoding.BASE_64
            });

            logMessage('DEBUG', 'signature: ', strSignature);

            logMessage('DEBUG', 'strFileContent length: ', intPDFSize);

            var objHeaders = {};
            objHeaders['Content-Type'] = 'application/pdf';
            objHeaders['Authorization'] = 'SharedKey ' + THIS_SCRIPT.CONSTANTS.AZURE_Account_Name + ':' + strSignature;
            objHeaders['x-ms-date'] = dtCurrentDate;
            objHeaders['x-ms-version'] = '2017-07-29';
            objHeaders['x-ms-range'] = 'bytes=0-'+intRangeSize;
            objHeaders['Content-Length'] = ''+intPDFSize;
            objHeaders['x-ms-write'] = 'update';

            logMessage('DEBUG', 'headers: ', objHeaders);

            var objResponse = https.put({
                url: strFileUrl,
                headers: objHeaders,
                body: strBinaryPDF
            });

            logMessage('DEBUG',TITLE, 'response code: ' + objResponse.code);
            logMessage('DEBUG',TITLE, 'response body: ' + objResponse.body);

            return objResponse.code;
        }

Заголовок для операции CREATE FILE:

{
   "Content-Type": "application/pdf",
   "x-ms-content-length": "23509",
   "x-ms-date": "Thu, 20 Feb 2020 07:15:07 GMT",
   "x-ms-type": "file",
   "x-ms-version": "2017-07-29",
   Authorization: "SharedKey test:1qM/i3u3A22QmL3vGwmYDqHcZOw3GSl3HdDvo8dz7rE="
}

Заголовок для операции PUT RANGE:

{
   "Content-Type": "application/pdf",
   Authorization: "SharedKey test:SY9Wk4kRsMSBO/MeqJ4mOItKNBk4rN22etm/LDkH0Wk=",
   "x-ms-date": "Thu, 20 Feb 2020 07:15:07 GMT",
   "x-ms-version": "2017-07-29",
   "x-ms-range": "bytes=0-23508",
   "Content-Length": "23509",
   "x-ms-write": "update"
}

Я использую SuiteScript (Javascript).

Для текстовых / простых файлов все работает правильно.

Не могли бы вы посоветовать, как загрузить файл PDF через REST API? ?

...