javascript - 使用 AJAX 下载文件。从 SD 卡。

标签 javascript html c ajax http

我使用 Atmel SAM4E-EK 微 Controller 作为创建网页的服务器,并通过 HTTP 协议(protocol)发送数据。但是我被困在下载功能中,我试图从我的 sd_card 下载文件,该文件不会超过 512MB。

static int cgi_Download_File(const char *name, char *recv_buf, size_t recv_len)
{

    UNUSED(recv_buf);
    UNUSED(recv_len);
    UNUSED(name);
    uint32_t length = 0;
    int i;
st = f_open(&file_logging, "Logging_File.csv",FA_OPEN_EXISTING | FA_READ);


    for (i=0; i<; i++)
    {
        st = f_read(&file_logging, Buff_logging ,128 , &br);

        sprintf((char *)tx_buf,
        "{ \"Download_test\":\"%s\"}",
            Buff_logging);

        http_sendOk(HTTP_CONTENT_JSON);
        http_write((char const *)tx_buf, strlen((char *)tx_buf));

    }


}

上面的代码是我从 SD 卡读取文件并尝试通过 HTTP 协议(protocol)将其发送到客户端的地方。我不能一次阅读超过 12kb,因为我占用了我所有的内存。所以我将文件分成包,所以基本上 Buff_logging 是我的包,它是 512 字节。

$(function() {
          $("button").click(function() {
            $.ajax({
              url: "get_Download_File",
              type: "GET",
              dataType: 'json',
              success: function(result) {
                var url = URL.createObjectURL(result);
                var $a = $('Download_test', {
                  'href': url,
                  'download': 'document.csv',
                  'text': "click"
                }).hide().appendTo("body")[0].click();
                setTimeout(function() {
                  URL.revokeObjectURL(url);
                }, 10000);
              }
            });
          });
        });

这是我使用 AJAX 进行文件下载的客户端。基本上我在这里想要实现的是按顺序一个一个地获取包并将它们作为 csv 文件恢复到客户端磁盘中。 ajax 函数仅适用于前 512 个字节,然后我不再收到任何数据包。

我想说的是,我没有使用 Java HTML 或 AJAX 的经验,我更喜欢低级编程,但如果我的代码有潜力或这是正确的方法,我将不胜感激做吧。

最佳答案

我怀疑问题出在你的循环中:

for (i=0; i<; i++)
{
    ...

    http_sendOk(HTTP_CONTENT_JSON);
    http_write((char const *)tx_buf, strlen((char *)tx_buf));

}

http_sendOk 将在每次读取时发送一个内容类型 header ,但 HTTP header 必须出现在响应正文之前,并且只出现一次。

我不熟悉你正在使用的库,但是将 http_sendOk 移到循环之外(初始化一次)并将 http_write 留在循环中(写入许多数据包)可能会解决您的问题。

关于javascript - 使用 AJAX 下载文件。从 SD 卡。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075026/

相关文章:

c - 在 while 循环内使用 scanf 读取数组时出现意外行为

c++ - 尝试解码音频上编码的类似 FM 的信号

javascript - Jquery.change()

javascript - 如果未对表单进行任何更改,则禁用提交按钮

Javascript : problem with 'this'

javascript - 如何每 5 秒重新加载一次页面?

php - 在javascript中制作书签

c - 将 unsigned int 的第 10、11、12 位覆盖为 X 的最简单方法是什么?

javascript - 如何解决 Angular 单元测试中 formgroup 中的 TypeError

JavaScript LetterGrade 函数