webclient使用疑惑 ,post上传数据无效,get下载数据

发布于 2020-12-01 11:02:47

硬件环境:
STM32F429 + ETH Phy + SPI FLASH
软件环境:
rtt 4.0.3 + lwip + webclient + dfs + elm + ota_download

问题疑惑点,我看了ota_download中的http_ota_fw_download函数,这个flash擦除和写都非常慢,http已经连接好了,不可能等到擦除完再给发数据,这个过程,webclient是怎么做到让服务器等待fal擦写好之后再发数据的?

另一个问题疑惑点,我搭建一个文件服务器,用webclient中的webclient_get_file从文件服务器上下载文件正常。再做一个php文件上传的页面,测试也是正常使用,文件可以通过html表单上传到服务器器。于是我便用webclient中的webclient_post_file函数上传文件,函数返回值也是正常的0.但是服务器上看不到文件,找找了很久没找到原因,调试都是正常的运行过去了,很奇怪
我下面放出来php代码和html测试的代码

<?php
if ($_FILES["file"]["error"] > 0)
{
    echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
    echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
    
    // 判断当期目录下的 upload 目录是否存在该文件
    // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
    if (file_exists("upload/" . $_FILES["file"]["name"]))
    {
        echo $_FILES["file"]["name"] . " 文件已经存在。 ";
    }
    else
    {
        // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
        echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
    }
}
?>
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<fieldset>
    <legend>文件上传</legend>
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file">
    <input type="submit" name="submit" value="提交">
</fieldset>
</form>
</body>
</html>

查看更多

关注者
0
被浏览
365
1 个回答
mii
mii 2021-03-23
  1. ota_download实现时是每4KB请求,根据请求回来大小,然后对FLASH进行擦写。这个过程很慢,HTTP服务器更会认为设备掉线了,整个下载过程就退出了。
  2. 我在NB与4G网络测试过该代码,如果使用NB这样低速网络,这个还可以应用。但在4G下载速度实现在快了,内部AT组件会报buff错误。分析就是因为写的太慢,靠成爆掉。
  3. 建议更改程序,采用分区下载方式实现,在高速网络上实测下载速度与写FLASH可以相适应。兼容性更好。
  4. http 1.1都支持分区请求。
  5. 服务器端我是帮不上了,但测试时可以使用网上http服务器工具。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览