请求-类型错误:无法读取未定义的属性“原始名称”

我必须开发一个脚本,该脚本每次在特定目录中创建一个文件时,都应在必须返回一些数据的特定API的主体调用中使用此文件。 为了监视目录,我正在使用看门狗python库,该库采用已创建文件的路径并调用指定用于调用api的另一种方法,并将文件路径传递给该方法。 这些是上传文件的api的主要规则: api rules for upload file

这些是我写的脚本: 第一个用于看门狗,第二个用于调用api

import time
from watchdog.observers import Observer
from watchdog.events import PatternmatchingEventHandler 
from bnotary_api import call_api

if __name__ == "__main__":
    patterns = "*"
    ignore_patterns = "./file_to_be_notarized/"
    #ignora creazione di directory
    ignore_directories = True
    case_sensitive = True
    my_event_handler = PatternmatchingEventHandler(patterns,ignore_patterns,ignore_directories,case_sensitive)

def on_created(event):

    path_file_created = event.src_path
    print(path_file_created)
    print(type(path_file_created))
    #file_created = open(path_file_created,'rb')
    file_created = path_file_created
    print(file_created)
    print(type(file_created))
    call_api(file_created)

path = "./file_to_be_notarized/"
my_event_handler.on_created = on_created
#boolean that allow me to catch all the event that occurs even in the sub directories of my current directory
go_recursively = True
my_observer = Observer()
my_observer.schedule(my_event_handler,path,recursive=go_recursively)
my_observer.start()

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    my_observer.stop()
    my_observer.join()

import requests
import json

def call_api(file):

    print("Inizio chiamata api bnotary\n")

    url = 'https://notaryb-api.bcademy.it/api/v1/upload/file'
    apiKey = 'my api key'
    headers = {'apiKey' : apiKey,'Content-Type':'application/x-www-form-urlencoded'}
    #hash = {'hash': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855','hashType' : 'SHA-256'}
    #file = file.replace('./','')
    file = {file : (file,open(file,'rb'),'application/x-www-form-urlencoded')} 
    print(type(file))
    #file = {'file' : open(file,'rb') }
    print("File passato a request\n",file)
    response = requests.post(url,headers=headers,files=file)

    print("Url della richiesta",response.request.url)
    print("Header della richiesta:\n",response.request.headers)
    print("Body della richiesta: \n",response.request.body)
    print("Status code risposta:\n",response.status_code)
    print("Response header:\n",response.headers)
    #print("Response Body:\n",response.body)
    print("Json risposta\n",response.json())

这是我收到的回复:

./file_to_be_notarized/65.txt
<class 'str'>
./file_to_be_notarized/65.txt
<class 'str'>
Inizio chiamata api bnotary

<class 'dict'>
File passato a request
 {'./file_to_be_notarized/65.txt': ('./file_to_be_notarized/65.txt',<_io.BufferedReader name='./file_to_be_notarized/65.txt'>,'application/x-www-form-urlencoded')}
Url della richiesta https://notaryb-api.bcademy.it/api/v1/upload/file
Header della richiesta:
 {'User-Agent': 'python-requests/2.22.0','accept-Encoding': 'gzip,deflate','accept': '*/*','Connection': 'keep-alive','apiKey': '3581ca332d59abbbb665c6ec993642ab8c576b06e95e7a916e06edd6fd9b49ba','Content-Type': 'application/x-www-form-urlencoded','Content-Length': '239'}
Body della richiesta: 
 b'--2d0b428db2846b7c39b01ed9c6a2ba4c\r\nContent-Disposition: form-data; name="./file_to_be_notarized/65.txt"; filename="./file_to_be_notarized/65.txt"\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n\r\n--2d0b428db2846b7c39b01ed9c6a2ba4c--\r\n'
Status code risposta:
 200
Response header:
 {'Date': 'Thu,19 Dec 2019 17:11:44 GMT','Server': 'Apache/2.4.18 (Ubuntu)','X-Powered-By': 'Express','Content-Type': 'application/json; charset=utf-8','Content-Length': '85','etag': 'W/"55-wYAYyT9/kMsIazT9gYE2c7VFqm8"','Keep-Alive': 'timeout=5,max=100','Connection': 'Keep-Alive'}
Json risposta
 {'status': 'KO','error': "TypeError: Cannot read property 'originalname' of undefined"}

尤其是我不明白为什么会返回此类错误:

{'status': 'KO','error': "TypeError: Cannot read property 'originalname' of undefined"}
muma96132 回答:请求-类型错误:无法读取未定义的属性“原始名称”

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2890235.html

大家都在问