如何使用 Lua 发送 multipart/form-data 格式的文件?
2020-12-17 10:12:50
收藏:0
阅读:170
评论:1
这是我的代码:
http = require("socket.http")
ltn12 = require("ltn12")
lfs = require "lfs"
respbody = {}
local _start = [[--abcd]]..'\r\n'..[[Content-Disposition: form-data; name="file"; filename="test.png"]]..'\r\n'..[[Content-Type: image/jpeg]]..'\r\n\r\n'
local _end = '\r\n'..[[--abcd--]]..'\r\n'
local file= io.open('./test.png')
local fileSize = lfs.attributes('./test.png').size
local body, code, headers, status = http.request {
method = "POST",
url = 'http://127.0.0.1:826/api/upload',
headers = {
["Content-Type"] = "multipart/form-data; boundary=abcd",
["Content-Length"] = fileSize + #_start + #_end
},
source = ltn12.source.cat(ltn12.source.string(_start),ltn12.source.file(file),ltn12.source.string(_end)),
sink = ltn12.sink.table(respbody)
}
print(body, code, headers, status, respbody)
我使用这个示例发送文件,但是并没有收到!这是结果:
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?


ltn12.source.file而使用了ltn12.source.string,因为文件长度不正确像你的解决方案一样尝试我的解决方案:
PS:你还需要确保在服务器端文件字段的名称与客户端相同:basename ($ _ FILES ['file'] ['name']);
http = require("socket.http") ltn12 = require("ltn12") lfs = require "lfs" http.TIMEOUT = 5 local function upload_file ( url, filename ) local fileHandle = io.open( filename,"rb") if (fileHandle) then local fileContent = fileHandle:read( "*a" ) fileHandle:close() local boundary = 'abcd' local header_b = 'Content-Disposition: form-data; name="file"; filename="' .. filename .. '"\r\nContent-Type: text/plain\r\n' local fileContent = '--' ..boundary .. '\r\n' ..header_b ..'\r\n'.. fileContent .. '\r\n--' .. boundary ..'--\r\n' local response_body = { } local _, code = http.request { url = url , method = "POST", headers = { ["Content-Length"] = fileContent:len(), ['Content-Type'] = 'multipart/form-data; boundary=' .. boundary }, source = ltn12.source.string(fileContent) , sink = ltn12.sink.table(response_body), } return code, table.concat(response_body) else return false, "File Not Found" end end local rc,content = upload_file ('http://127.0.0.1:826/api/upload', 'test.png' ) print(rc,content)