文件上传时异常Invalid field value for field "**"与enctype="multipart/form-data"

本文介绍了在进行文件上传操作时,form表单必须设置enctype属性为multipart/form-data的原因及正确用法。默认情况下,表单的编码格式为application/x-www-form-urlencoded,不适用于文件上传。只有使用multipart/form-data,才能正确传输文件数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在做文件上传时,有一个form标签的属性必须要加上。

    文件上传的form若如下面所写,则会报异常:Invalid field value for field "**",原因是:表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作。

    <s:form action="fileUpload.action" method="post"></s:form>

    应改成下面书写形式:

    <s:form action="fileUpload.action" method="post" enctype="multipart/form-data"></s:form>

 

    还需要注意一个问题:enctype=/"multipart/form-data/"是上传二进制数据; form里面的input的值以2进制的方式传过去。form里面的input的值以2进制的方式传过去,所以request就得不到值了。

 

### 处理Multipart/Form-Data请求 在Arduino环境中处理`multipart/form-data`类型的HTTP POST请求通常涉及解析上传文件或其他表单数据的内容。由于资源受限,Arduino平台上的实现可能不如服务器端那样复杂和全面。 对于Arduino而言,可以利用ESP8266或ESP32这类具备Wi-Fi功能的微控制器来接收并解析此类请求。下面是一个简单的例子展示如何使用ESP8266WebServer库来初步处理这种形式的数据: ```cpp #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; ESP8266WebServer server(80); void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi.."); } server.on("/upload", HTTP_POST, [](){ String body = server.arg("plain"); // 获取原始POST数据 int boundaryIndex = body.indexOf("--"); if(boundaryIndex >= 0){ // 这里简化了实际边界查找逻辑 // 假设我们只关心第一个部分,并且知道它是什么类型(比如图片) int startOfContentDisposition = body.indexOf("Content-Disposition:", boundaryIndex); // 找到内容的实际起始位置 int contentStart = body.indexOf("\r\n\r\n", startOfContentDisposition)+4; // 定位下一个分隔符的位置作为结束标志 int nextBoundaryIndex = body.indexOf("--", contentStart); // 提取实际内容 String fileContent = body.substring(contentStart, nextBoundaryIndex).trim(); // 存储接收到的数据至SPIFFS或者其他存储介质... File f = SPIFFS.open("/uploadedFile.txt", FILE_WRITE); if(!f.print(fileContent)){ server.send(500, "text/plain", "Failed saving file."); return; } f.close(); server.send(200, "text/plain", "Upload successful!"); }else{ server.send(400, "text/plain", "Invalid request format."); } }); server.begin(); } void loop() { server.handleClient(); } ``` 此代码片段展示了基本框架[^1],但请注意这只是一个非常基础的例子,在真实场景下还需要考虑更多细节如错误处理、安全性验证以及更复杂的多部件消息结构支持等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值