Python 获取类型错误:应为str、bytes或os.PathLike对象,而不是inMemoryPloadedFile

Python 获取类型错误:应为str、bytes或os.PathLike对象,而不是inMemoryPloadedFile,python,django,Python,Django,使用上面的代码,我试图上传一个csv文件并读取它。但是我得到了以下错误 打开(request.FILES['csv'])作为文件: TypeError:应为str、bytes或os.PathLike对象,而不是InMemoryUploadedFile 我错过了什么 django 2.0.7 Python3.5尝试将请求读入BytesIO流,然后对该对象执行操作 def post(self, request): form = CsvUploadForm(request.POST, requ

使用上面的代码,我试图上传一个csv文件并读取它。但是我得到了以下错误

打开(request.FILES['csv'])作为文件: TypeError:应为str、bytes或os.PathLike对象,而不是InMemoryUploadedFile

我错过了什么

django 2.0.7
Python3.5

尝试将请求读入BytesIO流,然后对该对象执行操作

def post(self, request):
    form = CsvUploadForm(request.POST, request.FILES)

    if form.is_valid():
        with open(request.FILES['csv']) as csv_source:
            has_header = csv.Sniffer().has_header(csv_source.read(1024))
            csv_source.seek(0)
            reader = csv.DictReader(csv_source)
            ....
            ....

    return HttpResponse("file Uploaded")
如上所述,您可以直接使用文件流作为,

def post(self, request):
    form = CsvUploadForm(request.POST, request.FILES)

    if form.is_valid():
        csv_source = BytesIO(request.FILES['csv'].read())
        has_header = csv.Sniffer().has_header(csv_source.read(1024))
        csv_source.seek(0)
        reader = csv.DictReader(csv_source)
        ....
        ....

    return HttpResponse("file Uploaded")
def post(自我,请求):
form=CsvUploadForm(request.POST、request.FILES)
如果form.is_有效():
reader=csv.DictReader(request.FILES['csv'])
....
....

return HttpResponse(“上传的文件”)
您不需要打开它,它已经是一个文件。直接将其传递给csv函数。@DanielRoseman,如果您可以将其添加为答案,我可以接受。谢谢
def post(self, request):
    form = CsvUploadForm(request.POST, request.FILES)

    if form.is_valid():
        reader = csv.DictReader(request.FILES['csv'])
        ....
        ....

    return HttpResponse("file Uploaded")