我需要使用 nodeJs 服務器在 Postgres 資料庫上上傳一個檔案。在前端(vueJs)我有<input ref="file_upload" type="file" multiple="true" @change="changeFile" >我選擇檔案的元素。選擇所需檔案后,我使用以下代碼將其轉換為base64字串:
var file_input = this.$refs.file_upload
var base64String
function changeFile() {
for(let i = 0; i < file_input.files.length; i ) {
var reader = new FileReader();
reader.onloadend = () => {
base64String = reader.result
.replace('data:', '')
.replace(/^. ,/, '');
console.log(base64String)
console.log("SIZE: " base64String.length)
}
reader.readAsDataURL(file_input.files[i]);
}
}
file_input.addEventListener('change', changeFile);
將其轉換為base64字串后,單擊按鈕時,我post使用以下代碼創建請求:
btnSubmit.addEventListener("click", () => {
let dat_title = file_input.files[0].name;
let url_files = "http://localhost:3000/blobFile/" dat_title "/" base64String
console.log("URL:\n" url_files)
fetch(url_files, {
method: "POST"
})
.then(response => {
response.json().then(parsedJson => {
console.log(parsedJson);
})
})
})
這就是問題開始的地方。如果base64字串的大小小于16kB,一般會做一個post請求,插入到資料庫表中(列是bytea型別,所以在插入之前我解碼base64字串)。但是,如果 base64 字串的大小超過 16kB,則會顯示一個錯誤,說明它如何無法獲取。所以我發現 URL 太大而無法獲取,我需要將其拆分成塊。我的問題是我該怎么做。如何將該base64字串拆分為塊并在 nodeJs 服務器上接收這些塊?我已經嘗試了數百萬種解決方案,但沒有任何效果。如果你知道如何解決這個問題,請寫下來。下面是nodeJs服務器配置:
應用程式.js
require('dotenv').config();
var express = require('express');
var cors = require('cors');
var app = express();
const pool = require('./dbConnect');
const port = 3000;
app.use(cors());
app.post("/blobFile/:title/:url(*)", pool.postBlobFile)
app.listen(port, () => {
var host = "localhost";
console.log(`Server listening on port http://%s:%s`, host, port);
})
dbConnect.js
const postBlobFile = (req, res) => {
const dat_title = req.params.title
var base64String = req.params.url
console.log("TITLE: " dat_title)
console.log("STRING: " base64String)
console.log("STRING_SIZE: " base64String.length)
pool.query(`insert into test_blob (dat_naziv, dat_blob)
values ('${dat_title}', decode('${base64String}', 'base64'))`,
(err, results) => {
if (err) console.log(err);
else{
res.json(results.rows)
}
})
}
module.exports = {
pool,
postBlobFile,
}
提前致謝
uj5u.com熱心網友回復:
POST 是有原因的。您正在使用 GET,POST 只是在您的代碼中無用
我看到了 2 個問題
我不知道你想做什么。但請注意,有 URL 長度限制。并且您正試圖利用它,這就是您收到此錯誤的原因。 如果您不想在 URL 中使用 bas64,我不明白您為什么要使用 POST
最好不要將 Postgres 用于 blob 或位元組型別的東西。只是一個建議。使用 s3 或空格之類的東西。
btnSubmit.addEventListener("click", () => { let dat_title = file_input.files[0].name; let url_files = "http://localhost:3000/blobFile/" console.log("URL:\n" url_files) fetch(url_files, { method: "POST", 'data | body': {'**Your data over here**'} }) .then(response => { response.json().then(parsedJson => { console.log(parsedJson); }) }) })
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460478.html
標籤:javascript 节点.js Vue.js 邮政 块
