我试图用我的覆盆子pi中的python脚本发送一些数据,我已经有了类似的问题,而且有些人回答我的不是我想要的东西,但有些工作你可以查一下{{3我试图让base64编码发送然后解码并保存它,现在我尝试以不同的方式尝试在multipart/form-data
中发送一些数据问题是,在我的python脚本中,当我试图发送视频时,它似乎没有发送任何视频,但是当我从Postman发送它完美地工作时,我试图看看代码是什么在邮差上。
这是将邮件发送到我的php服务器的邮递员代码
import requests
url = "http://192.168.1.208:8080/api/createvideo"
payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"files\"; filename=\"20180215-033512.mp4\"\r\nContent-Type: video/mp4\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"ip_address\"\r\n\r\n10.10.10.110\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"date\"\r\n\r\n2018-02-14 18:27:20\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
'Accept': "application/json",
'Content-Type': "application/x-www-form-urlencoded",
'Cache-Control': "no-cache",
'Postman-Token': "50de5d50-e0f9-d2ab-6b37-aee8aa127bb3"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
我正在做的事情的邮差形象: here
这里是我的python代码,我在这里构建请求:
file = {'files': open(filename,"rb"),
'date': file = {'file': open(filename,'rb'),
'ip_address': self.api.get_ip()}
r = self.api.postvideo(file)
发布请求服务代码:
def postvideo(self, file):
return requests.post(self.url+'createdevice',files=file)
为什么在Postman中会很好,我想知道我错过了什么,因为当它到达我的Laravel服务器时它显示为空,这就是我在Laravel中所做的事情
if ($request->hasFile('files')) {
$device = Device::where('ip_address',request('ip_address'))->first();
$path = public_path().'/video/'.$device->id.'/';
$file = str_random(8).'.mp4';
$file_name = $path.$file;
$request->file('files')->move($path,$file);
$video = Video::create([
'date' => request('date'),
'device_id' => $device->id,
'video' => $file_name
]);
return response()->json([ 'data' => $video]);
}
return response()->json([ 'data' => 'No Video Attach'],404);
p.s我已经尝试了View post on imgur.com
答案 0 :(得分:1)
所以我做了一些错误,我没有真正做出相同的结果,但它确实有效,首先我改变了这个:
file = {'files': open(filename,"rb"),
'date': file = {'file': open(filename,'rb'),
'ip_address': self.api.get_ip()}
为此你可以看到我拆分数据和文件:
file = {'files': ('video.mp4',open(filename,"rb"))}
data = {'date': file = {'file': open(filename,'rb'),
'ip_address': self.api.get_ip()}
我真的不知道发生了什么,但我之前也做了time.sleep
因为我正在使用子进程,显然视频无法在阅读模式下使用它以便帮助我也是。
还有其他的事情要发布这样的帖子请求:
return requests.post(self.url+'createvideo',files=file,data=data)
我这样做是为了当它到达Laravel时我可以像这样使用它们:
这是读取文件并重新定位
$request->file('files')->move($path,$file);
这是为了获取任何数据:
$request->input('ip_address')