Django API拒绝文件



我试图发送一个csv文件到我的Django API和响应过程数据,但当我发送它时,我得到错误:

django.utils.datastructures。MultiValueDictKeyError:"文件">

这是我的代码:

import { useState } from 'react';
import './App.css';
function App() {
const [file, setFile] = useState(null);
const uploadFiles = e =>{
setFile(e);
}
const insertFile = async() => {
const f = new FormData();
f.append("file", file);
await fetch(
api,
{
method: 'POST',
headers: { 'content-type': 'multipart/form-data' },
body: f,
})
.then((response) => response.json())
.then((data)=>{
console.log(data);
})
.catch(error=>{
console.log(error);
});
}
return (
<>
<input type="file" name="file" onChange={(e)=>uploadFiles(e.target.files)}/>
<button onClick={()=>insertFile()}>Insertar</button>
</>
);
}
export default App;

这是处理信息的view。py文件,现在,我只想在前端获取csv信息,所以如何处理数据的逻辑现在不重要

@api_view(['POST'])
def eda(request):
file = request.FILES['file']
data = []
with open(file, encoding='utf-8') as csvf:
csvReader = csv.DictReader(csvf)
for rows in csvReader: 
data.append(rows)

response = {
'csvData': data 
}
return Response(response)

似乎您的文件根本没有添加到FormData中。这是因为您发送的是一个文件列表,而不是单个文件。所以不用

<input type="file" name="file" onChange={(e)=>uploadFiles(e.target.files)}/>

使用这个

<input type="file" name="file" onChange={(e)=>uploadFiles(e.target.files[0])}/>

,在Django端使用:

file = request.FILES.get('file') # won't raise exception
if file is None:
# show some error response

request.data.get('file')代替request.FILES.get('file')

最新更新