Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中存储通过浏览器动态生成的多个文件_Django_Django Models_Django Forms_Django Views_Recorder.js - Fatal编程技术网

在django中存储通过浏览器动态生成的多个文件

在django中存储通过浏览器动态生成的多个文件,django,django-models,django-forms,django-views,recorder.js,Django,Django Models,Django Forms,Django Views,Recorder.js,我正在django应用程序中使用。在这种情况下,将在浏览器中创建多个音频文件。我的问题是如何直接从浏览器将这些文件存储在服务器中 我得到的线索很少,比如在FileField中使用upload_to,它可以通过表单存储,或者在Django中使用基于文件的会话。然而,我不知道如何进行,因为结合以下原因对我来说似乎很复杂: 要同时存储的多个文件, 以及直接从浏览器中存储,而不是在浏览器中手动上载。 有没有人能解决这个问题。提前谢谢 [更新] 我以代码的形式按照如下所示的方向进行: 在URL.py中 在

我正在django应用程序中使用。在这种情况下,将在浏览器中创建多个音频文件。我的问题是如何直接从浏览器将这些文件存储在服务器中

我得到的线索很少,比如在FileField中使用upload_to,它可以通过表单存储,或者在Django中使用基于文件的会话。然而,我不知道如何进行,因为结合以下原因对我来说似乎很复杂:

要同时存储的多个文件, 以及直接从浏览器中存储,而不是在浏览器中手动上载。 有没有人能解决这个问题。提前谢谢

[更新] 我以代码的形式按照如下所示的方向进行:

在URL.py中

在models.py中

我通过ajaxjquery发送音频文件blob

function uploadBlob(blob) {
var fd = new FormData();
fd.append('fname', 'test.wav');
fd.append('data', blob);
$.ajax({
type: 'POST',
url: '/audio_file/',
data: fd,
processData: false,
contentType: false,

success: function(response) {
console.log("everything worked!");
$("#audio_file").html(response);
},
error: function(obj, status, err) { alert(err); console.log(err); }

});
然后,我在Django视图[views.py]中收到这个文件。但是,虽然接收到文件,但调用save方法时会生成错误。是否有人知道这方面的解决方案,或者是否有更好的方法:

@csrf_exempt    
def recorder(request):
if request.method=='POST' or request.is_ajax():

    e1=InputFile() 
    e1.audio_file=request.FILES  #<-- Audio file is received here
    e1.input_user=request.user
    e1.rec_date=datetime.datetime.now()
    e1.save()   #<-- When save() method is executed, **error** is generated
   return HttpResponseRedirect(--another-page--)
return render_to_response('recorder2.html',RequestContext(request))

由于安全原因,浏览器不允许您设置表单字段的值。想象一下隐藏此字段并将值设置为某个易受攻击的文件


您需要。

直接从浏览器存储意味着什么?您需要向服务器执行POST请求,您知道这一点,对吗?然后将request.FILES传递给ModelForm并调用.save方法。我认为数据库不是存储文件的最佳场所。@KrzysztofSzularz正是……我如何执行POST请求。当我把{{form}}放到HTML中时,我得到了我不想要的上传按钮。但是,我的浏览器中已经有了.wav,那么我如何在这里执行POST请求呢。说到数据库,我指的是服务器很抱歉造成混乱谢谢,我没有意识到安全问题。但是,很抱歉,我对JQuery了解不多。您知道如何将此与Django集成吗?我是直接向服务器提交还是通过表单提交?这与Django无关。单独询问如何使用recorder.js接收的文件执行POST查询。有很多Java脚本程序员随时准备帮助您。只要适当地标记你的问题。
function uploadBlob(blob) {
var fd = new FormData();
fd.append('fname', 'test.wav');
fd.append('data', blob);
$.ajax({
type: 'POST',
url: '/audio_file/',
data: fd,
processData: false,
contentType: false,

success: function(response) {
console.log("everything worked!");
$("#audio_file").html(response);
},
error: function(obj, status, err) { alert(err); console.log(err); }

});
@csrf_exempt    
def recorder(request):
if request.method=='POST' or request.is_ajax():

    e1=InputFile() 
    e1.audio_file=request.FILES  #<-- Audio file is received here
    e1.input_user=request.user
    e1.rec_date=datetime.datetime.now()
    e1.save()   #<-- When save() method is executed, **error** is generated
   return HttpResponseRedirect(--another-page--)
return render_to_response('recorder2.html',RequestContext(request))