无法获取 request.FILES django
Posted
技术标签:
【中文标题】无法获取 request.FILES django【英文标题】:Unable to get request.FILES django 【发布时间】:2018-05-31 14:07:28 【问题描述】:我正在尝试将文本文件上传到我的 django 后端,但我的 request.FILES
始终为空。
我正在使用 axios 发送文件,并遵循 django 要求将“multipart/form-data”作为请求的内容类型。
我错过了什么?
在我的 app.js 上,我通过以下方式发送发布请求:
new Vue(
el: '#app',
data:
reqtype: '',
uploadedFile: '',
,
methods:
onSubmit(event)
this.submitLoading = true;
if (! this.validateForm(this))
event.preventDefault();
this.submitLoading = false;
return;
var formData = new FormData();
formData.append("reqtype", this.reqtype)
formData.append('fileToUpload', this.uploadedFile)
axios.post('/sreqtool/tc/', formData,
headers:
'Content-Type': 'multipart/form-data'
)
,
onFileChange(e)
var files = e.target.files || e.dataTransfer.files;
if (!files.length)
return;
var reader = new FileReader();
var vm = this;
reader.onload = (e) =>
vm.uploadedFile = e.target.result;
;
reader.readAsDataURL(files[0]);
,
关于网络请求负载:
------WebKitFormBoundarymAnl54hGVTifZzwM 内容配置:表单数据; name="reqtype"
基于文件
------WebKitFormBoundarymAnl54hGVTifZzwM 内容配置:表单数据; name="fileToUpload"
数据:text/plain;base64,OTA1NTIzMzg2NQ0KOTE3NTAwMTU0Mg0KOTc3NDczNjcyNg0KMTIzNTQ2ODQ1Ng== ------WebKitFormBoundarymAnl54hGVTifZzwM--
在我的views.py中我有:
@csrf_exempt
def index(request):
if request.method == 'POST':
DLOG.info(request.POST)
DLOG.info(request.FILES)
form = ExtractForm(request.POST, request.FILES)
if form.is_valid():
res = QueryManager.processRequest(request.user, form.cleaned_data)
DLOG 是我的记录器,dlog 的输出是:
[2017-12-18 16:51:06,510] INFO views index: <QueryDict: u'fileToUpload': [u'data:text/plain;base64,OTA1NTIzMzg2NQ0KOTE3NTAwMTU0Mg0KOTc3NDczNjcyNg0KMT
IzNTQ2ODQ1Ng=='], u'reqtype': [u'filebased']>
[2017-12-18 16:51:06,512] INFO views index: <MultiValueDict: >
【问题讨论】:
那个 JS 函数是什么的一部分?即this
是什么?您可能需要从输入元素中获取实际文件,例如this.uploadedFile.files[0]
。
它是 vue 对象的一部分。我更新了代码 sn-p 以包含 vue 实例化。
您正在尝试保存 base64 图像。阅读:***.com/questions/39576174/…
@Farrukh 我正在发送一个文本文件
【参考方案1】:
它表示您的图像编码为 base64
u'fileToUpload': [u'data:text/plain;base64,OTA1NTIzMzg2NQ0KOTE3NTAwMT...
【讨论】:
【参考方案2】:我现在可以读取文件内容了。
我使用了 Farrukh 评论中的链接 *** answer
代码更新为:
@csrf_exempt
def index(request):
if request.method == 'POST':
form = ExtractForm(request.POST, request.FILES)
if form.is_valid():
res = QueryManager.processRequest(request.user, form.cleaned_data)
format, imgstr = data.split(';base64,')
ext = format.split('/')[-1]
data = ContentFile(base64.b64decode(imgstr), name='temp.' + ext)
filetext = data.read()
filetext 包含我需要的文件中的字符串。
【讨论】:
以上是关于无法获取 request.FILES django的主要内容,如果未能解决你的问题,请参考以下文章