gpt4 book ai didi

couchdb - 如何从浏览器上传文件(附件)?

转载 作者:行者123 更新时间:2023-12-04 03:08:46 25 4
gpt4 key购买 nike

我没有上传附件以使浏览器正常工作。

一些提示是 here , 其他 there . The docs非常好,但我无法将其转换为 AJAX 上传。

我正在寻找一个 super 简单的 HTML/JavaScript 示例(带有或不带有 jQ​​uery),说明如何将文件从(相对现代的)浏览器上传到数据库 没有 使用 jquery.couch.app.js 包装器或其他东西。越简单越好。

任何帮助表示赞赏。

最佳答案

好的,这是您的纯 JavaScript 文件上传实现。

基本算法是这样的:

  • 从文件输入元素
  • 获取文件
  • 获取文件名并键入文件对象
  • 获取要附加到
  • 的文档的最新文档修订版本
  • 使用获取的修订版
  • 将文件附加到文档中

    HTML 部分基本上由一个带有两个元素的简单表单组成,一个类型为 file 的输入。和一个 submit 类型的按钮.

    <form action="/" method="post" name="upload">
    <input type="file" name="file" />
    <button type="submit" name="submit">Upload</button>
    </form>

    现在到 JavaScript 部分。

    window.onload = function() {
    var app = function() {
    var baseUrl = 'http://127.0.0.1:5984/playground/';
    var fileInput = document.forms['upload'].elements['file'];
    document.forms['upload'].onsubmit = function() {
    uploadFile('foo', fileInput.files[0]);
    return false;
    };

    var uploadFile = function(docName, file) {
    var name = encodeURIComponent(file.name),
    type = file.type,
    fileReader = new FileReader(),
    getRequest = new XMLHttpRequest(),
    putRequest = new XMLHttpRequest();

    getRequest.open('GET', baseUrl + encodeURIComponent(docName),
    true);
    getRequest.send();
    getRequest.onreadystatechange = function(response) {
    if (getRequest.readyState == 4 && getRequest.status == 200) {
    var doc = JSON.parse(getRequest.responseText);
    putRequest.open('PUT', baseUrl +
    encodeURIComponent(docName) + '/' +
    name + '?rev=' + doc._rev, true);
    putRequest.setRequestHeader('Content-Type', type);
    fileReader.readAsArrayBuffer(file);
    fileReader.onload = function (readerEvent) {
    putRequest.send(readerEvent.target.result);
    };
    putRequest.onreadystatechange = function(response) {
    if (putRequest.readyState == 4) {
    console.log(putRequest);
    }
    };
    }
    };
    };
    };
    app();
    };

    基本上,我拦截了 submit通过将我自己的函数绑定(bind)到表单的 onsubmit 来实现表单事件事件并返回 false。

    在那个事件处理程序中,我用两个参数调用我的主函数。第一个是文档名称,第二个是要上传的文件。

    在我的 uploadFile()函数我设置文件名、文件类型并抓取一些实例。第一个 HTTP 请求是获取文档当前修订的 GET 请求。如果该请求成功,我通过设置先前获得的修订、正确的内容类型来准备 PUT 请求(实际的上传请求),然后将文件转换为 ArrayBuffer。完成后,我只需发送我刚刚准备好的 HTTP 请求,然后我就放松了。

    独立的附件上传方案如下所示:
    PUT host/database/document/filename?revision=latest-revision

    当然,在 HTTP 请求 header 中使用正确的内容类型。

    注意:我很清楚我在这里根本没有使用防御性编程,我故意这样做是为了简洁。

    关于couchdb - 如何从浏览器上传文件(附件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11864257/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com