突破限制!在 Vercel 上实现文件上传的替代方案:自建 Node.js 文件上传服务器

🙆‍♀️我的项目部署上线之后遇到一个问题:

在我本地运行的时候,没有报错,各个功能都可以用,而当我部署到vecel之后,使用上传文件的功能就会报错:

图片

于是我去vecel里面看了logs,发现了如下报错:

Upload error: Error: ENOENT: no such file or directory, mkdir '/var/task/public/uploads'

这是由于在 Vercel 的无状态文件系统上,代码试图在 /var/task/public/uploads 目录中创建文件或目录,但该路径并不存在或不允许写入。

Vercel 的无状态文件系统会在每次请求结束后清除所有文件和临时目录,因此直接在服务器上保存文件是不可靠的。

原本,我是单纯的想省下一笔云存储的钱,现在看来还是我太天真了 😂。

这时候只能考虑外部的文件存储了,但是不想再多花钱,就利用上了之前买的香港的服务器,配置一个文件上传和访问的接口,解决我这个项目的上传文件问题~👾

👩‍🔧 然后就开始干活了:

先在本地初始化一个node项目,安装上express multer cors:

npm init -y 
npm install express multer cors

创建了一个server.js文件,写上传文件和访问文件的接口,用chatgpt帮忙写:

const express = require('express');
const multer = require('multer');
const path = require('path');
const cors = require('cors');

const app = express();

// 允许跨域
app.use(cors());

// 保留原始文件名和扩展名
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/');
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    const ext = path.extname(file.originalname); // 获取文件扩展名
    cb(null, file.fieldname + '-' + uniqueSuffix + ext); // 保留原始文件名和扩展名
  }
});

const upload = multer({ storage: storage });

// 提供静态文件访问
app.use('/uploads', express.static(path.join(__dirname, 'uploads')));

// 根路径路由
app.get('/', (req, res) => {
  res.send('File upload server is running.');
});

// 文件上传接口
app.post('/upload', upload.single('file'), (req, res) => {
  if (!req.file) {
    return res.status(400).json({ message: 'No file uploaded' });
  }

  // 返回访问文件的URL而不是路径
  const fileUrl = `http://xxxx/uploads/${req.file.filename}`;

  res.json({ fileUrl });
});

// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server is running on http://xxxx:${PORT}`);
});

然后传到了宝塔上,创建一个node项目,正常部署就可以。

图片

可以去测试一下,上传个文件看看有没有上传到相应的文件夹📂:

图片

大功告成⛷

这样一来,通过自建文件上传服务器,我们成功避开了 Vercel 的文件系统限制,💷既不用额外购买云存储,又能让项目平稳运行。

部署完成后,只需将 Next.js 项目中的文件上传路径改为新配置的服务器地址,一切功能便能如常使用啦!✌

### 回答1: 对于您的问题,我可以很高兴地回答。小型人工智能(AI)在轻量级应用中具有很大潜力。这是因为小型AI可以在嵌入式设备和移动设备中操作,而不需要大量的计算和存储资源。这意味着它们可以用于许多应用领域,例如智能家居,物联网设备,移动应用,智能医疗,安防系统等。此外,小型AI还具有更快的速度和更低的能源成本,因此可以更好地适应未来的需求。总之,小型AI的前景非常广阔,可以应用于各种轻量级应用场景。 ### 回答2: 小模型人工智能在轻量级应用方面具有广阔的前景。首先,小模型人工智能可以在嵌入式设备上进行高效的运算,实现智能化的功能。例如,智能家居设备可以通过小模型人工智能实现语音控制、图像识别等功能,使得家居更加智能化和便捷化。 其次,小模型人工智能可以应用于医疗领域。例如,通过小模型人工智能可以实现快速并准确的疾病诊断,帮助医生提高工作效率和诊断准确性。同时,小模型人工智能还可以用于监测患者的生理指标,及时发现异常情况并提供预警,为医疗机构提供更好的健康管理服务。 此外,小模型人工智能还可以用于智能交通系统中。通过小模型人工智能可以实现快速的交通流量检测和预测,提供更准确的交通信息和路况推荐。同时,小模型人工智能还可以应用于车辆自动驾驶系统,实现更安全和高效的交通出行。 另外,小模型人工智能还可以应用于智能推荐系统。通过小模型人工智能可以分析用户的偏好和行为,精准地推荐用户感兴趣的内容和产品,提供更好的用户体验和个性化的服务。 综上所述,小模型人工智能在轻量级应用方面具有巨大的潜力和前景。它可以应用于智能家居、医疗、智能交通、智能推荐等领域,为人们的生活和工作带来更多的便利和效益。 ### 回答3: 小模型人工智能在轻量级应用的前景非常广阔。首先,小模型人工智能具有较小的体积和运算速度,适合嵌入式设备和移动设备上的应用。这意味着小模型人工智能可以在智能手机、智能家居设备、智能穿戴设备等轻量级设备上实现智能化的功能,如语音识别、图像识别、人脸识别等。 其次,小模型人工智能还可以应用于边缘计算。边缘计算是指将数据处理和分析的能力从云端延伸到离用户更近的边缘设备上。小模型人工智能可以在边缘设备上进行实时的数据处理和模型推理,避免了数据传输的延迟和带宽压力,提高了响应速度和隐私保护。 此外,小模型人工智能还可以广泛应用于医疗、交通、物流等领域的轻量级应用中。例如,在医疗领域,小模型人工智能可以应用于远程医疗、智能疾病诊断等,帮助医生实现更准确的诊断和治疗方案;在交通领域,小模型人工智能可以应用于交通监控、智能交通信号灯等,提高交通流量的效率和安全性。 综上所述,小模型人工智能在轻量级应用的前景十分广阔,将为各个领域的智能化应用带来更多可能性,并在嵌入式设备、移动设备、边缘计算等方面发挥重要作用。这将加速人工智能技术的普及和推广,为人们的生活带来更多便利和效益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值