Javascript AZURE文件服务-通过REST API上载PDF

Javascript AZURE文件服务-通过REST API上载PDF,javascript,azure,rest,pdf,suitescript,Javascript,Azure,Rest,Pdf,Suitescript,我正试图在Azure中上载一个带有Https文件请求服务(不是blob)的PDF文件 我已在文件共享上创建了一个文件,但该文件的内容有问题。我不知道我应该以哪种格式上传内容 我尝试使用PUT RANGE操作并将主体作为BASE64发送。操作成功,但PDF不可读。我还尝试以二进制形式发送内容,但结果相同 function uploadFileContentOnAzure(strFileUrl, objInvoicePDF, dtCurrentDate, strGUID, strBinaryPDF)

我正试图在Azure中上载一个带有Https文件请求服务(不是blob)的PDF文件

我已在文件共享上创建了一个文件,但该文件的内容有问题。我不知道我应该以哪种格式上传内容

我尝试使用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;
        }
创建文件操作的标头:

{
   "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范围操作的标题:

{
   "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)

对于文本/普通文件,一切都正常工作


您能建议如何通过RESTAPI上传PDF文件吗

您不使用storage SDK的原因是什么?是的,suitescript不支持storage SDK。这就是我需要使用REST API的原因。为了完整起见,请编辑您的问题并包含代码。谢谢。我添加了用于PUT范围操作的代码。您如何尝试使用流?