如何将NextJs中的File docx保存到Prisma ORM

亿牛云.jpeg

背景/引言

在现代 Web 开发中,Next.js 是一个备受欢迎的 React 框架,它具有许多优点,如:

  • 服务器端渲染 (SSR):Next.js 支持服务器端渲染,可以提高页面加载速度,改善 SEO,并提供更好的用户体验。
  • 静态站点生成 (SSG):Next.js 还支持静态站点生成,使你可以预先生成页面并将其缓存,从而减少服务器负载。
  • 路由系统:Next.js 的路由系统非常灵活,可以轻松处理动态路由和参数。
  • 开发体验:Next.js 提供了热模块替换 (HMR)、TypeScript 支持、自动导入 CSS 等功能,使开发变得更加愉快。

在本文中,我们将探讨如何在 Next.js 应用中处理上传的 Word 文档 (.docx) 文件,并将其内容保存到 Prisma ORM 中。同时,我们还将介绍如何使用爬虫技术,通过代理 IP 从外部源获取数据。

正文

1. 设置NextJs项目

首先,我们需要创建一个新的NextJs项目,并安装所需的依赖包。

npx create-next-app my-nextjs-app
cd my-nextjs-app
npm install @prisma/client prisma multer

2. 配置Prisma ORM

初始化Prisma,并配置数据模型。

npx prisma init

prisma/schema.prisma文件中,添加一个Document模型:

model Document {id        Int      @id @default(autoincrement())name      Stringcontent   BytescreatedAt DateTime @default(now())
}

同步数据库:

npx prisma migrate dev --name init

3. 处理文件上传

在NextJs中,使用multer中间件来处理文件上传。创建一个API路由来接收上传的文件。

// pages/api/upload.js
import { PrismaClient } from '@prisma/client';
import multer from 'multer';const prisma = new PrismaClient();
const upload = multer();export const config = {api: {bodyParser: false,},
};const handler = async (req, res) => {upload.single('file')(req, res, async (err) => {if (err) {return res.status(500).send(err.message);}const { originalname, buffer } = req.file;const document = await prisma.document.create({data: {name: originalname,content: buffer,},});res.status(200).json(document);});
};export default handler;

4. 前端文件上传表单

创建一个简单的表单,用于上传docx文件。

// pages/index.js
import { useState } from 'react';const Home = () => {const [file, setFile] = useState(null);const handleFileChange = (e) => {setFile(e.target.files[0]);};const handleSubmit = async (e) => {e.preventDefault();const formData = new FormData();formData.append('file', file);const response = await fetch('/api/upload', {method: 'POST',body: formData,});const data = await response.json();console.log(data);};return (<form onSubmit={handleSubmit}><input type="file" onChange={handleFileChange} /><button type="submit">Upload</button></form>);
};export default Home;

5. 使用爬虫代理IP进行采集

在某些情况下,我们可能需要从外部源获取数据。这里展示如何使用代理IP进行爬虫,使用爬虫代理服务。

// utils/proxyScraper.js
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');const proxy = {host: 'your-proxy-host', // 亿牛云爬虫代理的域名 www.16yun.cnport: 'your-proxy-port', // 亿牛云爬虫代理的端口auth: {username: 'your-username', // 亿牛云爬虫代理的用户名password: 'your-password', // 亿牛云爬虫代理的密码},
};const agent = new HttpsProxyAgent(`http://${proxy.auth.username}:${proxy.auth.password}@${proxy.host}:${proxy.port}`);const fetchData = async (url) => {try {const response = await axios.get(url, {httpsAgent: agent,});return response.data;} catch (error) {console.error('Error fetching data:', error);throw error;}
};module.exports = fetchData;

6. 示例爬取数据并存储到Prisma

示例代码展示如何使用上述代理IP配置,从外部源爬取数据,并将其存储到Prisma ORM中。

// pages/api/scrape.js
import { PrismaClient } from '@prisma/client';
import fetchData from '../../utils/proxyScraper';const prisma = new PrismaClient();const handler = async (req, res) => {try {const data = await fetchData('https://example.com/data-source');const document = await prisma.document.create({data: {name: 'Scraped Data',content: Buffer.from(data),},});res.status(200).json(document);} catch (error) {res.status(500).json({ error: 'Failed to fetch and save data' });}
};export default handler;

结论

本文介绍了如何在NextJs中处理docx文件上传,并将其存储到Prisma ORM中。同时,展示了如何使用爬虫代理进行采集,并将爬取到的数据存储到数据库中。通过这些示例代码,开发者可以更好地理解文件处理和数据存储的流程,并灵活应用代理IP技术来扩展数据获取能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/349262.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Introducing Index-1.9B

简介 大家好&#xff0c;今天我们很高兴首次发布Index系列模型中的轻量版本&#xff1a;Index-1.9B系列 本次开源的Index-1.9B 系列包含以下模型&#xff1a; Index-1.9B base : 基座模型&#xff0c;具有 19亿 非词嵌入参数量&#xff0c;在2.8T 中英文为主的语料上预训练&…

小程序面试题全(offer直接给他拿下)

各位小伙伴们&#xff0c;好久不见&#xff0c;突然想起来微信小程序没有给大家整一份面经&#xff0c;废话不多说&#xff0c;开干&#xff01; 1.wxml和html有什么区别 ①使用标签不同。 ②wxml提供了和vue.js中模版语法类似的模版语法&#xff0c;而html没有。 ③html在…

期末测试2(1)---PTA

一开始写错了&#xff0c; 因为这个再定义一个和原函数一样类型的进行存储&#xff0c; 然后将第一个设置为最大的&#xff0c;依次用循环比较后面的&#xff0c; 最后输出 但是这个适用于找最大的、字符串这样最后只输出一个最大项比较好 对于结构体不好将比较的这个数所…

大数据同步方案怎么选,才能提高企业的业务效率?

大数据同步通常指的是在多个数据源或存储系统之间同步数据的过程&#xff0c;可以确保数据的一致性&#xff0c;提高数据的可用性和可靠性&#xff0c;同时支持数据分析和决策制定。 大数据同步的步骤通常包括&#xff1a; 数据识别&#xff1a;确定需要同步的数据类型和范围&…

教程:A5000 GPU 上运行阿里最新开源大模型 Qwen2

这是我们新一篇关于大模型的文章&#xff0c;我们此前还讲过如何运行 LLama3 大模型。而这次&#xff0c;我们将使用 Ollama 运行阿里千问Qwen2:7b。要知道 Qwen2 可是目前最热门的开源大语言模型了&#xff0c;甚至在一些性能测试中比 LLama3 表现还突出。谁不想试试看呢&…

unity基础(五)地形详解

目录 一 创建地形 二 调整地形大小 三 创建相邻地形 四 创建山峰 五 创建树木 七 添加风 八 添加水 简介: Unity 中的基础地形是构建虚拟场景的重要元素之一。 它提供了一种直观且灵活的方式来创建各种地形地貌&#xff0c;如山脉、平原、山谷等。 通过 Unity 的地形…

嵌入式硬件VS软件,到底哪个更难?

在嵌入式系统开发中&#xff0c;硬件和软件是密不可分的两个方面。但是&#xff0c;究竟是硬件开发更具挑战性&#xff0c;还是软件开发更难以应对呢&#xff1f;本文将就这一问题展开讨论&#xff0c;探究嵌入式硬件和软件在开发过程中的各种挑战与特点。 一、硬件开发&#…

数据预处理之基于预测的(线性,ARIMA)异常值检测#matlab

基于密度的LOF异常值检测可见上篇文章。以下介绍基于预测的异常值检测&#xff1a; 1.基于预测的异常值检测方法 基于预测的异常值检测方法&#xff0c;特别是结合线性回归和ARIMA&#xff08;自回归积分滑动平均模型&#xff09;模型&#xff0c;是数据分析中常用的技术。这…

Jenkins For Windows编译构建C#项目环境搭建(完整版)

安装Jenkins 下载Windows安装包 官方下载地址 选择稳定版&#xff0c;这里下载的是最新版&#xff0c;如需下载指定版本点击 以前的发行版 配置java环境 下载 java jdk 17 jdk17官方下载链接 这里下载的是msi版本的安装包 安装jdk17 双击运行安装包&#xff0c;一直下…

VS2022 使用C++访问 mariadb 数据库

首先,下载 MariaDB Connector/C++ 库 MariaDB Products & Tools Downloads | MariaDB 第二步,安装后 第三步,写代码 #include <iostream> #include <cstring> #include <memory> #include <windows.h>#include <mariadb/conncpp.hpp>…

RocketMq使用简单案例

1. 在pom.xml中添加rocketmq依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.3</version> </dependency> 注意&#xff1a;rocketmq的版本需要…

开源VisualFbeditor中文版,vb7 IDE,VB6升级64位跨平台开发安卓APP,Linux程序

吴涛老矣&#xff0c;社区苦无64位易语言&#xff0c;用注入DLL增强菜单&#xff0c;做成VS一样的界面 终归是治标不治本&#xff0c;一来会报毒&#xff0c;二来闭源20年没更新了 开源的VB7&#xff0c;欢迎易语言的铁粉进群&#xff1a;1032313876 【Freebasic编程语言】编绎…

预告|博睿数据将受邀出席GOPS全球运维大会北京站!

GOPS全球运维大会作为国内外运维领域最具影响力的技术盛会之一&#xff0c;旨在汇聚全球运维精英&#xff0c;分享运维领域的前沿技术、实践经验与创新理念。6月28日&#xff0c;博睿数据&#xff08;bonree.com&#xff0c;股票代码688229&#xff09;将受邀出席第二十三届 GO…

React 18

创建 React 18 脚手架项目 全局安装 create-react-app npm install -g create-react-app yarn global add create-react-app . 确认是否已安装 create-react-app npm list -g create-react-app yarn global list | grep create-react-app . 如果安装失败 有时&#xff0…

动作识别综合指南

本文将概述当前动作识别&#xff08;action recognition&#xff09;的方法和途径。 为了展示动作识别任务的复杂性&#xff0c;我想举这个例子&#xff1a; 你能明白我在这里做什么吗&#xff1f;我想不能。至少你不会确定答案。我正在钻孔。 你能弄清楚我接下来要做什么吗&…

RabbitMQ实践——配置Prometheus和Grafana报表

大纲 启用rabbitmq_prometheus插件安装启动Prometheus创建用户下载并解压修改配置启动 安装启动grafana安装启动配置数据源 在《RabbitMQ实践——在Ubuntu上安装并启用管理后台》中我们已经安装成功RabbitMQ及其管理后台。在此基础上&#xff0c;我们将打通它和Prometheus、Gra…

【npm】console工具(含胶囊,表格,gif图片)

这是一款控制台花样输出工具 相对丰富的输出方式 文本输出属性值输出胶囊样式输出表格输出图片输出&#xff08;含动图&#xff09; 安装 npm install v_aot引用 import v_aot from "v_aot";字段说明 字段类型属性字符串值字符串类型default 、 primary 、 suc…

Zabbix 7.0 新增功能亮点(二)——history.push API方法

Zabbix7.0LTS一经发布便吸引了众多运维小伙伴的关注&#xff0c;乐维社区forum.lwops.cn也伴随着不少小伙伴的热议与探讨&#xff0c;话不多说&#xff0c;抓紧上车。 前面我们介绍了zabbix 7.0 新增功能亮点&#xff08;一&#xff09;——T参数&#xff0c;本篇将向大家介绍z…

Three.js的渲染器:WebGLRenderer、CSS3DRenderer、SVGRenderer

我们都晓得渲染器是负责将场景中的3D对象转换为2D图像&#xff0c;然后显示在屏幕上&#xff0c;three.js内置了多种渲染器&#xff0c;来应对不同的和需求&#xff0c;贝格前端工场老司机&#xff0c;简要和大家分享下。 一、渲染器的定义和作用 在Three.js中&#xff0c;渲…

2024热门骨传导耳机购买推荐!精选五款好用不贵!

对于很多喜欢运动健身的小伙伴&#xff0c;在现在市面上这么多种类耳机的选择上&#xff0c;对于我来说的话还是很推荐大家去选择骨传导运动耳机的&#xff0c;相较于普通的入耳式蓝牙耳机&#xff0c;骨传导耳机是通过振动来传输声音的&#xff0c;而入耳式耳机则是通过空气传…