3行代码让textarea支持拖拽上传:InlineAttachment原生JS集成实战与常见坑

📅 2026/8/27 17:50:53
3行代码让textarea支持拖拽上传:InlineAttachment原生JS集成实战与常见坑
3行代码让textarea支持拖拽上传InlineAttachment原生JS集成实战与常见坑【免费下载链接】InlineAttachmentEasily paste and upload files/images in plain textareas项目地址: https://gitcode.com/gh_mirrors/in/InlineAttachmentInlineAttachment 是一个轻量级 JavaScript 开源插件能让普通 textarea 通过3 行代码获得图片文件拖拽上传与剪贴板粘贴上传能力上传时先插入占位文本成功后自动替换为 Markdown 图片链接体验类似在 GitHub 评论框里直接粘贴截图。本文带你走通原生 JS 集成步骤、关键配置以及 6 个静默失败的常见坑。它能做什么️拖拽上传把图片拖进 textarea 即开始上传粘贴上传截图后 CtrlV 直接粘贴注意粘贴功能目前仅在 Chrome 中生效✍️光标定位插入占位符插在当前光标位置上传完成后原位替换为file多编辑器适配原生 textarea、jQuery、AngularJS、CodeMirror 3/4完整事件钩子接收文件、上传前、响应处理、成功/失败回调一应俱全核心库位于 src/inline-attachment.jstextarea 适配器位于 src/input.inline-attachment.js官方入门文档见 docs/pages/getting-started.rst。三步快速集成textarea 拖拽上传实战第 1 步引入两个 JS 文件核心库 input 适配器script srcinline-attachment.js/script script srcinput.inline-attachment.js/script第 2 步一行代码绑定到你的 textareainlineAttachment.editors.input.attachToInput(document.getElementById(code));第 3 步指定上传地址默认指向upload_attachment.php务必改成你的后端接口inlineAttachment.editors.input.attachToInput( document.getElementById(code), { uploadUrl: /api/upload } );绑定逻辑内部会同时监听paste、drop、dragenter、dragover四个事件参考实现见 src/input.inline-attachment.js。完整可运行的演示页面可直接打开 demo/input.html。核心配置速查上传地址、允许类型与占位文案全部默认值定义在 src/inline-attachment.js 中最常用的几项配置项默认值说明uploadUrlupload_attachment.php文件上传接口地址uploadFieldNamefile后端接收文件的 POST 字段名jsonFieldNamefilename后端 JSON 中图片 URL 对应的键名allowedTypesjpeg / png / jpg / gif允许的 MIME 类型不在列表内会被静默忽略progressText![Uploading file...]()上传中的占位文本urlTextfile成功后的插入文本{filename}会被服务端返回的地址替换extraHeaders{}附加请求头如鉴权 Token完整配置说明见 docs/pages/configuration.rst。服务端模板如何正确返回上传结果插件要求接口返回JSON且成功状态码必须为200或201否则一律按失败处理逻辑见 src/inline-attachment.js。最小返回格式{ filename: http://your.site/uploads/xxx.png }项目自带一个 PHP 示例接口可直接参考demo/upload_attachment.php。如果你用 Node/Java/Go 等后端只要保证「字段名为file JSON 里带filename键」这两点即可字段名也可通过uploadFieldName/jsonFieldName自定义。常见坑清单为什么我的拖拽上传没反应⚠️忘了设置uploadUrl默认值是upload_attachment.php请求 404 后只会在占位符处留下Error uploading file控制台报的错很容易忽略。⚠️服务端 JSON 键名不匹配后端返回{ url: ... }而jsonFieldName默认是filename插件取不到地址就不会替换占位符。⚠️文件格式不在allowedTypes里比如拖了个.docx插件会直接走浏览器默认行为没有任何提示——想要任意文件请自行扩展该数组。⚠️粘贴上传只在 Chrome 可用README 明确说明 paste 功能仅 Chrome 支持其他浏览器请用拖拽。⚠️接口返回非 200/201如网关返回 302 重定向会被判为上传失败跨域接口记得处理好 CORS。⚠️上传中手动清空/覆盖 textarea插件靠匹配progressText占位文本来替换成最终链接用户若在上传途中清空了内容替换就会失败。进阶事件钩子与多编辑器支持beforeFileUpload上传前拦截返回false可取消发送适合做前端大小校验onFileReceived文件被拖入/粘贴时触发onFileUploadResponse自定义响应处理返回false可接管默认逻辑onFileUploaded/onFileUploadError成功与失败回调错误回调返回false可抑制默认 alert如果你用的是其他编辑器项目提供了现成适配器jQuerysrc/jquery.inline-attachment.jsCodeMirror 4src/codemirror-4.inline-attachment.jsAngularJSsrc/angularjs.inline-attachment.js对应示例页面分别位于 demo/jquery.html、demo/codemirror-4.html 和 demo/angularjs.html可直接对照着改。总结InlineAttachment 用最少的代码补齐了 textarea 缺失的图片拖拽上传体验引入 2 个文件 1 行绑定即可上线重点把握uploadUrl、jsonFieldName、allowedTypes三个配置再避开上面 6 个坑就能在评论框、工单、论坛等纯文本输入场景中快速复刻GitHub 式粘贴截图体验。【免费下载链接】InlineAttachmentEasily paste and upload files/images in plain textareas项目地址: https://gitcode.com/gh_mirrors/in/InlineAttachment创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考