我在我的django应用程序中使用RecorderJS。在此,在浏览器中创建多个音频文件。我的问题是如何将这些文件存储在服务器中(直接从浏览器中)。
我在upload_to
中使用FileField
(可以通过表单存储)或在Django中使用file-based sessions
等方面很少使用。但是,我不知道如何继续进行,因为结合以下原因似乎很复杂:
有没有人能解决这个问题。提前谢谢。
[更新] 我已经按照代码的形式进行了如下所示的指示:
在urls.py
url(r'^audio_file/$', 'nalign_app_recorder.views.recorder'),
在models.py
class InputFile(models.Model):
audio_file = models.FileField(upload_to='/audio')
input_user = models.ForeignKey(User)
rec_date = models.DateTimeField('date recorded', auto_now_add=True)
我通过Ajax Jquery发送音频文件(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))
答案 0 :(得分:0)
出于安全原因,浏览器不允许您设置<file>
表单字段的值。 (想象一下隐藏这个字段并将值设置为一些易受攻击的文件)。