mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
3.2 KiB
138 lines
3.2 KiB
6 months ago
|
---
|
||
|
title: 'Upload via API'
|
||
|
description: 'Upload files locally present or from public remote URL via API'
|
||
|
hide_table_of_contents: true
|
||
|
---
|
||
|
|
||
|
Sample code to upload files via API is listed below.
|
||
|
Assumes `http://localhost:8080/` as the base URL for the API calls.
|
||
|
|
||
|
# Upload local file
|
||
|
|
||
|
```javascript
|
||
|
let axios = require("axios").default;
|
||
|
let FormData = require('form-data');
|
||
|
let fs = require('fs');
|
||
|
|
||
|
// Configurations
|
||
|
//
|
||
|
const project_id = '<Project Identifier>';
|
||
|
const table_id = '<Table Identifier>';
|
||
|
const xc_token = '<Auth Token>';
|
||
|
const file_path = '<Local File Path>';
|
||
|
|
||
|
|
||
|
// Insert Image
|
||
|
// @param image_path : local file path
|
||
|
// @return : JSON object to be used in insert record API for attachment field
|
||
|
//
|
||
|
async function insertImage (path) {
|
||
|
const formData = new FormData();
|
||
|
formData.append("file", fs.createReadStream(path));
|
||
|
const data = await axios({
|
||
|
url: 'http://localhost:8080/api/v2/storage/upload',
|
||
|
data: formData,
|
||
|
headers:{
|
||
|
'Content-Type':`multipart/form-data;`,
|
||
|
'xc-token': xc_token
|
||
|
},
|
||
|
method: 'post',
|
||
|
|
||
|
// Optional : storage file path
|
||
|
params: {"path": "somePath"}
|
||
|
});
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
// Insert record with attachment
|
||
|
// Assumes a table with two columns :
|
||
|
// 'Title' of type SingleLineText and
|
||
|
// 'Attachment' of type Attachment
|
||
|
//
|
||
|
async function uploadFileExample() {
|
||
|
let response = await insertImage(file_path);
|
||
|
|
||
|
let row = {
|
||
|
"Title": "2",
|
||
|
"Attachment": response.data
|
||
|
};
|
||
|
|
||
|
await axios({
|
||
|
method: 'POST',
|
||
|
url: `http://localhost:8080/api/v2/tables/${table_id}/records`,
|
||
|
data: row,
|
||
|
headers: {
|
||
|
'xc-token': xc_token
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
(async () => {
|
||
|
await uploadFileExample();
|
||
|
})();
|
||
|
```
|
||
|
|
||
|
# Upload via URL
|
||
|
|
||
|
```javascript
|
||
|
let axios = require("axios").default;
|
||
|
let FormData = require('form-data');
|
||
|
let fs = require('fs');
|
||
|
|
||
|
// Configurations
|
||
|
//
|
||
|
const project_id = '<Project Identifier>';
|
||
|
const table_id = '<Table Identifier>';
|
||
|
const xc_token = '<Auth Token>';
|
||
|
|
||
|
// URL array : URLs of files to be uploaded
|
||
|
const URLs = [{ url: '<URL1>' }, { url: '<URL2>' }];
|
||
|
|
||
|
// Insert Image
|
||
|
// @param URLs : [] containing public URL for files to be uploaded
|
||
|
// @return : JSON object to be used in insert record API for attachment field
|
||
|
//
|
||
|
async function insertImageByURL (URL_array) {
|
||
|
const data = await axios({
|
||
|
url: 'http://localhost:8080/api/v2/storage/upload-by-url',
|
||
|
data: URL_array,
|
||
|
headers: {
|
||
|
'xc-token': xc_token
|
||
|
},
|
||
|
method: 'post',
|
||
|
|
||
|
// Optional : storage file path
|
||
|
params: {"path": "somePath"}
|
||
|
});
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
// Insert record with attachment
|
||
|
// Assumes a table with two columns :
|
||
|
// 'Title' of type SingleLineText and
|
||
|
// 'Attachment' of type Attachment
|
||
|
//
|
||
|
async function uploadByUrlExample() {
|
||
|
let response = await insertImageByURL(URLs);
|
||
|
|
||
|
// Update two columns : Title and Attachment
|
||
|
let row = {
|
||
|
"Title": "3",
|
||
|
"Attachment": response.data
|
||
|
};
|
||
|
|
||
|
await axios({
|
||
|
method: 'POST',
|
||
|
url: `http://localhost:8080/api/v2/tables/${table_id}/records`,
|
||
|
data: row,
|
||
|
headers: {
|
||
|
'xc-token': xc_auth
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
(async () => {
|
||
|
await uploadByUrlExample();
|
||
|
})();
|
||
|
```
|