Javascript AZURE文件服务-通过REST API上载PDF
我正试图在Azure中上载一个带有Https文件请求服务(不是blob)的PDF文件 我已在文件共享上创建了一个文件,但该文件的内容有问题。我不知道我应该以哪种格式上传内容 我尝试使用PUT RANGE操作并将主体作为BASE64发送。操作成功,但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)
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范围操作的代码。您如何尝试使用流?