使用AJAX下载文件.来自SD卡
Downloading file with AJAX. From a SD card.
我使用Atmel SAM4E-EK微控制器作为创建网页的服务器,并通过HTTP协议发送数据。但我被困在下载功能中,我试图从我的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协议将其发送到客户端的地方。我不能一次读超过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
将在每次读取时发送一个内容类型的标头,但HTTP标头必须位于响应主体之前,并且只出现一次。
我不熟悉您使用的库,但将http_sendOk
移出循环(初始化一次)并将http_write
留在循环中(写入许多数据包)可能会解决您的问题。
void http_write(const char *buf, u32_t len)enter code here
{
g_hs->file = buf;
g_hs->left = len;
http_send_data(g_pcb, g_hs);
/*
* Tell TCP that we wish be to informed of buf that has been
* successfully sent by a call to the http_sent() callback.
*/
tcp_sent(g_pcb, http_sent);
}
这是直接形成库的函数。。。。。
好的,目前我已经实现了向客户端传输数据包,但这并没有解决我的问题。我最多可以发送20个2560字节的数据包,这是我可以存储在服务器中的最大值。有可能实现某种流吗第一次读取128b表单SD_card文件第二次通过HTTP发送到客户端第三个客户端获取包第四个数据包正在下载(发送完所有数据包后,下载过程必须停止)
我已经完成了前3个步骤,所以请有人帮助我如何实现流效果。
- 有可能过滤来自嵌入式YouTube的声音吗
- 如何在创建键时引用来自同一对象的键
- 来自文本输入null的html javascript变量
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- 选项卡侦听器未被来自后台脚本的消息激活
- 如何使用offer/answer交换来自两个对等连接的流
- 来自文档或下一个静态父级的事件委派
- 在ng重复循环中显示来自不同文件夹的图像
- AngularJS-需要在index.html页面中访问来自服务的数据
- 你能用来自数组的属性名称生成一个对象吗
- 在javascript中接收来自mssql.query的变量
- 在ajax调用中阻止来自JS对象的函数
- 如何在.js函数中检索来自其他模板的表单的目标值
- 为其他JS生成定义“;编译器”;来自TypeScript定义文件
- JS,“;对象”;,这个和那个.来自蟒蛇这真的让我很困惑.(双关语)
- 如何检查消息(postMessage)来自哪个跨域iframe
- 有可能在来自链接的警报中有一个值吗
- 使用AJAX下载文件.来自SD卡
- 来自SD卡内部存储的Javascript Android-rread文件
- 显示来自sd卡的所有图像