我目前正在使用Chrome Addon Postman-REST Client轻松创建POST/GET请求,这是一个非常好的工具.
现在我想调试一个上传脚本,我正在寻找一个工具来将请求编码为"multipart/form-data",这样我也可以发送一个文件.
谢谢你的帮助
如何multipart/form-data在python中发送请求?如何发送文件,我理解,但如何通过这种方法发送表单数据无法理解.
假设我在页面上有这个元素:
<input id="image-file" type="file" />
Run Code Online (Sandbox Code Playgroud)
这将创建一个按钮,允许网页用户通过浏览器中的"文件打开..."对话框选择文件.
假设用户单击所述按钮,在对话框中选择一个文件,然后单击"确定"按钮关闭对话框.
选定的文件名现在存储在:
document.getElementById("image-file").value
Run Code Online (Sandbox Code Playgroud)
现在,假设服务器在URL"/ upload/image"处理多部分POST.
如何将文件发送到"/ upload/image"?
另外,如何收听文件上传完成的通知?
我想从AngularJS到node.js服务器做一个简单的多部分表单帖子,表单应该在一个部分包含一个JSON对象,在另一个部分包含一个图像,(我目前只发布带有$ resource的JSON对象)
我想我应该从input type ="file"开始,但后来发现AngularJS无法绑定到那个..
我能找到的所有例子都是用于拖放jQuery插件的拖放.我想要一个简单的上传一个文件.
我是AngularJS的新手,对编写我自己的指令感到不舒服.
谢谢你的光临.
我想送new FormData()的body一个的POST使用请求提取API
操作看起来像这样
var formData = new FormData()
formData.append('myfile', file, 'someFileName.csv')
fetch('https://api.myapp.com',
{
method: 'POST',
headers: {
"Content-Type": "multipart/form-data"
},
body: formData
}
)Run Code Online (Sandbox Code Playgroud)
这里的问题是边界,类似的东西
boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu
从来没有进入Content-Type:标题
它看起来应该是这样的
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu
当你用a尝试"相同"的操作时new XMLHttpRequest(),就像这样
var request = new XMLHttpRequest()
request.open("POST", "https://api.mything.com")
request.withCredentials = true
request.send(formData)Run Code Online (Sandbox Code Playgroud)
标题已正确设置
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu
所以我的问题是,
我如何使这种情况fetch完全像XMLHttpRequest?
如果这不可能,为什么?
谢谢大家!这个社区或多或少是我取得职业成功的原因.
我在使用multipart-form上传图片时遇到问题
这是我从这个答案中使用的代码
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
var boundary = generateBoundaryString()
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = NSMutableData()
if self.img.image != nil {
var imageData = UIImagePNGRepresentation(self.img.image)
if imageData != nil {
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"image\"; filename=\"image.png\"\r\n")
body.appendString("Content-Type: image/png\r\n\r\n")
body.appendData(imageData!)
body.appendString("\r\n")
}
}
body.appendString("--\(boundary)--\r\n")
request.setValue("\(body.length)", forHTTPHeaderField:"Content-Length")
request.HTTPBody = body
Run Code Online (Sandbox Code Playgroud)
然后我使用NSURLSession来应用请求
服务器说我没有选择上传图片我只想暂时上传图片
我是否必须使用图像路径上传任何图像,或者它的数据是否足够?
我是否会错过任何事情,有什么帮助才能理解这一点?
我们multipart/form-data 来自w3.com的以下示例:
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="submit-name"
Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
Run Code Online (Sandbox Code Playgroud)
这很简单,但是假设您正在编写实现此功能的代码并从头开始创建这样的请求.假设file1.txt是由用户创建的,我们无法控制其内容.
如果文本文件file1.txt包含字符串--AaB03x怎么办?您可能AaB03x随机生成边界,但让我们假设"百万只猴子进入百万网络表单"场景.
有没有一种标准的方法来处理这种不可能但仍然可能的情况?
应该text/plain(或者甚至可能像image/jpeg或application/octet-stream)是"编码"或部分内以某种方式"逃"的信息?
或者开发人员是否应始终搜索文件的内容以获取边界,然后反复继续选择一个新的随机生成的边界,直到在文件中找不到所选的字符串?
我正在尝试将一个大文件 (\xe2\x89\xa53GB) 上传到我的 FastAPI 服务器,而不将整个文件加载到内存中,因为我的服务器只有 2GB 可用内存。
\n服务器端:
\nasync def uploadfiles(upload_file: UploadFile = File(...):\nRun Code Online (Sandbox Code Playgroud)\n客户端:
\nm = MultipartEncoder(fields = {"upload_file":open(file_name,\'rb\')})\nprefix = "http://xxx:5000"\nurl = "{}/v1/uploadfiles".format(prefix)\ntry:\n req = requests.post(\n url,\n data=m,\n verify=False,\n )\nRun Code Online (Sandbox Code Playgroud)\n返回:
\nasync def uploadfiles(upload_file: UploadFile = File(...):\nRun Code Online (Sandbox Code Playgroud)\n我不确定MultipartEncoder实际发送到服务器的内容,因此请求不匹配。有任何想法吗?
python file-upload starlette fastapi python-requests-toolbelt
我很沮丧,找不到解决方案:
我正在使用 angularjs 和 nodejs 创建一个项目。我从 node js 中的 angular 端获取图像数据并将此数据发送到进一步的 api。我收到错误
{
"error": {
"detail": "Multipart form parse error - Invalid boundary in multipart: None"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在 nodejs 端的代码:
var request = require('request');
console.log(req.files);
var data = {
website:'www.gamail.xom',
contact_number:'dsdsd',
services_offered:'dsadasd',
contact_name:'dasdas',
provider_category:'exchange',
email:'kk@gmail.com',
image:req.files
}
var api_url = global.common.base_url + 'vcard/1.0.0/visit_card/' + req.param('uuid') +'/';
request({
url: api_url,
method: 'PUT',
headers: {
'Content-Type': 'multipart/form-data',
'Authorization': 'Bearer '+req.cookies.apitoken
},
json: data
}, function(error, response, body) {
if(response.statusCode == 200 …Run Code Online (Sandbox Code Playgroud) 我正在使用django REST框架构建API.
为了测试这个API,我使用pytest和测试客户端,如下所示:
def test_doesnt_find(self, client):
resp = client.post(self.url, data={'name': '123'})
assert resp.status_code == 404
Run Code Online (Sandbox Code Playgroud)
要么
def test_doesnt_find(self, client):
resp = client.get(self.url, data={'name': '123'})
assert resp.status_code == 404
Run Code Online (Sandbox Code Playgroud)
在使用REST框架的常规GET,POST和DELETE类时(例如DestroyAPIView,RetrieveUpdateAPIView或仅APIView使用get和post函数)都可以工作
我遇到问题的地方是使用PATCH和PUT视图.如RetrieveUpdateAPIView.在这里,我突然不得不使用:
resp = client.patch(self.url, data="name=123", content_type='application/x-www-form-urlencoded')
Run Code Online (Sandbox Code Playgroud)
要么
resp = client.patch(self.url, data=json.dumps({'name': '123'}), content_type='application/json')
Run Code Online (Sandbox Code Playgroud)
如果我只是尝试像我习惯的那样使用测试客户端,我会收到错误:
rest_framework.exceptions.UnsupportedMediaType: Unsupported media type "application/octet-stream" in request.
Run Code Online (Sandbox Code Playgroud)
当我在client.patch()调用中指定'application/json'时:
rest_framework.exceptions.ParseError: JSON parse error - Expecting property name enclosed in double quotes: line 1 column 2 (char 1)`
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释这种行为吗?特别难以捕捉,因为卷曲只是用得很好-X PATCH …