Я пытаюсь загрузить 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? ?