Upload file in File Attachment field using add record fail

  • 0
  • 2
  • Question
  • Updated 1 year ago
  • In Progress
  • (Edited)
Hi Dandiebolt,

I have to read any type of file (i.e. PDF, ms office files) from my file system (windows server) and add them to file attachment field into a quickbase table. 

I use javascript (node.js) to read a file with base64 encoding(as quickbase requires files to have base64 encoding) and use http post method (API_AddRecord) to upload the file.  I have made the field as Mandatory (just to ensure the content is there).

I always get error that "Sorry, you didnot supply a value for the required field.... Please provide a non blank value".

I fail to understand that when my console.log is showing value (first line in uploadfiletoqb method), why API is complaining about the field being blank!

I feel I am wrong somewhere which i am not able to comprehend!

Can some one please please help !!!

Here is my code :

var http = require('https');
var request = require('request'); // npm install request
var fs = require("fs");
var buf = new Buffer(1024);


console.log("Going to open an existing file");


var readStream = fs.createReadStream('d:\\MyData\\MyNode.js\\Certificates\\b.pdf',{ encoding: 'base64' });
readStream.on('data', function (chunk) {
    buf += chunk;
console.log("read data 11 "+buf.length);
})
readStream.on('end', function () {
  console.log("read data "+buf.length);
  uploadfiletoqb(buf);
});


function uploadfiletoqb(buf1)
{

console.log("encoded file"+buf1);
var xml = '<qdbapi><udata>mydata</udata><field fid="6" filename="b.pdf">'+buf1+'</field></qdbqpi>';
   
  console.log("-----");
  //console.log(xml);
  console.log("-----");
request({
url : "https://sssss.quickbase.com/db/bm3uve9ig?act=API_AddRecord&username=xxxx@yyyyy.com&password=...;,
method: "POST", 
//headers: {
//"content-type": "text/xml"  
//}, 
body:xml
}, function (err, remoteResponse, remotebody){
if (err) {console.log("error"+remoteResponse+" -- "+err); }
    console.log("ok "+remoteResponse +" "+remotebody);
});


}


would appreciate help!!!!

thanks & regards
dinesh
Photo of Dinesh

Dinesh

  • 202 Points 100 badge 2x thumb

Posted 1 year ago

  • 0
  • 2
Photo of Matthew Neil

Matthew Neil

  • 31,438 Points 20k badge 2x thumb
This might seem silly, but are there any fields on the table that are "required" at the field level?  That is what your error is...  
"Sorry, you did not supply a value for the required field.... Please provide a non blank value"
(Edited)
Photo of Dinesh

Dinesh

  • 202 Points 100 badge 2x thumb
Hi Matthew

Thanks for the revert. My issue is not that ... as I have tested it by removing mandatory setting also, but it still doesn't work. The xml content is simply not send to the quickbase. I did simple tests to determinde that.

The issue as per me is that how do i post a http request (since I am running from outside quickbase) for adding a record and uploading a attachment field. 

Can you help me over there ?

My code looks like this :-

var vxml = '<qdbapi><udata>mydata</udata><usertoken>token<\usertoken><field name="Upload" filename="b.pdf">'+buf1+'</field></qdbqpi>';

request({
        url : "https://apollotyres.quickbase.com";,
        path: "/db/bm3uve9ig",
        method: "POST", 
        headers: {
                              "content-type": "text/xml" ,
                              "QUICKBASE-ACTION": "API_AddRecord"
                   }, 
       data:vxml
}, function (err, remoteResponse, remotebody){
if (err) {console.log("error"+remoteResponse+" -- "+err); }
    console.log("error "+remoteResponse +" "+remotebody);
});


Please note buf1 in first line of code where i have declared the XML variable is a base64 encoded content of a PDF file which i am trying to upload.  I am aware how to add a record by passing all parameters data through URL, but unable to do so by passing the XML as data in request.

Hope you can guide me.

regards
dinesh