Yogi
07/30/2023, 11:24 PMbattk
07/31/2023, 12:31 AMbattk
07/31/2023, 12:31 AMYogi
08/02/2023, 5:23 AM/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 */
define(['N/file', 'N/record', 'N/runtime', 'N/encode', 'N/log'], function(file, record, runtime, encode, log) {
    function onRequest(context) {
        if (context.request.method === 'POST') {
            try {
                // Log the entire request for debugging
                log.debug('Request Details', JSON.stringify(context.request));
                var base64Content = context.request.parameters.fileContent; // assuming the base64 content is sent with the key 'fileContent'
                if (!base64Content) {
                    throw new Error("Base64 content is missing");
                }
                var decodedContent = encode.convert({
                    string: base64Content,
                    inputEncoding: encode.Encoding.BASE_64,
                    outputEncoding: encode.Encoding.UTF_8
                });
                
                var fileName = context.request.parameters.fileName; // assuming the file name is sent with the key 'fileName'
                if (!fileName) {
                    throw new Error("File name is missing");
                }
                var fileType = file.Type.PDF; // modify this as per your file type
                var uploadFile = file.create({
                    name: fileName,
                    fileType: fileType,
                    contents: decodedContent,
                    folder: 8977501 // Specify your folder ID here
                });
                var fileId = uploadFile.save();
                // Load the file to get its URL
                var fileRecord = file.load({
                    id: fileId
                });
                var fileUrl = fileRecord.url;
                context.response.write({
                    output: 'Success! File uploaded. File ID: ' + fileId + ', File URL: ' + fileUrl
                });
            } catch (e) {
                log.error('Error in Suitelet', e.toString());
                context.response.write({
                    output: 'Error: ' + e.toString()
                });
            }
        }
    }
    return {
        onRequest: onRequest
    };
});def upload_to_ns(file_name, base64_data, folder_id, logger):
    NS_URL = secrets['restletapi']['ns_url2']
    oauth = OAuth1(C_KEY,
                    client_secret=C_SECRET,
                    resource_owner_key=A_TOKEN,
                    resource_owner_secret=A_SECRET,
                    signature_method='HMAC-SHA256',
                    realm=REALM)
    
    headers = {
        'prefer': 'transient',
        'Content-Type': 'application/json',
        'Cookie': 'NS_ROUTING_VERSION=LAGGING'
    }
    
    url = NS_URL
    payload = {
    'fileName': file_name,
    'fileContent': base64_data.decode()
}
    
    try:
        <http://logger.info|logger.info>(f"Attempting to upload {file_name} to NetSuite folder with ID - {folder_id}")
#        response = <http://requests.post|requests.post>(url, auth=oauth, headers=headers, files=payload)
        response = <http://requests.post|requests.post>(url, auth=oauth, headers=headers, json=payload)
                
        response.raise_for_status()  # raise an HTTPError if the response status is not 2xx
        # Process the response
        if response.status_code == 200:
            response_json = response.json()
            print("\nUpload Result:")
            print(response_json["output"])
    except requests.exceptions.HTTPError as errh:
        logger.error(f"HTTP error occurred while uploading {file_name} to NetSuite. error : {errh}")
        raise
    except requests.exceptions.ConnectionError as errc:
        logger.error(f"Error Connecting while uploading {file_name} to NetSuite. error : {errc}")
        raise
    except requests.exceptions.Timeout as errt:
        logger.error(f"Timeout Error while uploading {file_name} to NetSuite. error : {errt}")
        raise
    except requests.exceptions.RequestException as err:
        logger.error(f"Error occurred while uploading {file_name} to NetSuite. error : {err}")
        raise
# --- Time --- #
def get_time():
    _now = datetime.datetime.now()
    _d1 = now.strftime("%Y%m%d%H%M%S_%f")[:-3]
    return _d1
# ------------ Related to Logging ---------- #
_time = get_time()
log_file_name = "upload_to_ns_"+_time+".log"
# Set up the logger
logger = setup_logger(_name_, log_file_name)
# # --------- execute it -------- #
file_name = "Origin.pdf"
with open("Origin.pdf", "rb") as f:
        file_contents = f.read()
        base64_bytes = base64.b64encode(file_contents) # Here you should use file_contents, not f.read()
folder_id = "8856479"        
upload_to_ns(file_name, base64_bytes, folder_id, logger)
=============================
Error :
  File "/Users/yogi/Downloads/Vendors/Vendor_new_code/post_csv.py", line 185, in <module>
    upload_to_ns(file_name, base64_bytes, folder_id, logger)
  File "/Users/yogi/Downloads/Vendors/Vendor_new_code/post_csv.py", line 139, in upload_to_ns
    response.raise_for_status()  # raise an HTTPError if the response status is not 2xx
  File "/Users/yogi/Library/Python/3.10/lib/python/site-packages/requests/models.py", line 1021, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: <https://xxxxxxxxx.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=1750&deploy=1>Yogi
08/02/2023, 5:24 AMbattk
08/02/2023, 5:55 AMYogi
08/02/2023, 7:09 AMYogi
08/02/2023, 7:10 AM/**
 * @NApiVersion 2.x
 * @NScriptType Restlet
 */
define(['N/file', 'N/encode'], function (file, encode) {
    function post(context) {
        try {
            var base64Content = context.fileContent;
            var folderId = context.folderId; // Retrieve the folder ID from the context
            var fileName = context.fileName;
            var fileType = file.Type.PDF; // Modify this as per your file type
            var uploadFile = file.create({
                name: fileName,
                fileType: fileType,
                contents: base64Content,
                folder: folderId // Use the provided folder ID here
            });
            
            var fileId = uploadFile.save();
            // Load the file to get its URL
            var fileRecord = file.load({
                id: fileId
            });
            var fileUrl = "<https://xxxxxxx-sb1.app.netsuite.com>" + fileRecord.url; // Concatenate with base URL
            return {
                success: true,
                message: 'File uploaded successfully!',
                fileId: fileId,
                fileUrl: fileUrl // Return the full URL
            };
        } catch (e) {
            return {
                success: false,
                message: e.toString()
            };
        }
    }
    return {
        post: post
    };
});Yogi
08/02/2023, 7:10 AMbattk
08/02/2023, 7:37 AMbattk
08/02/2023, 7:37 AMbattk
08/02/2023, 7:38 AM