Django View 无法使用请求获取文件.来自 ajax 表单的文件提交
django view cannot get file using request.FILES from ajax form submit
我尝试使用 ajax 提交此表单,以便 django 视图可以从请求中提取选定的文件。文件并写入服务器上的目录
<form enctype="multipart/form-data" method="post" id="fileupoadform">{% csrf_token %}
<p>
<label>Select a file
<input type="file" name="fselect" id="fselect"> </input>
</label>
</p>
<input type="submit" value="upload">
</form>
视图是
def ajax_upload(request):
print 'ajax_upload()'
print 'request=',request
to_return = {}
store_message="failure"
if (request.is_ajax()) and (request.method == 'POST'):
print 'is ajax and post'
print 'request.FILES=',request.FILES
if request.FILES.has_key('fselect'):
print "request has key='fselect'"
file = request.FILES['fselect']
with open(settings.UPLOADPATH'%s' % file.name, 'wb+') as dest:
for chunk in file.chunks():
dest.write(chunk)
store_message="success"
to_return['store_message']= store_message
print 'to_return=',to_return
to_return['store_message']= store_message
serialized = simplejson.dumps(to_return)
print 'serialized=',serialized
if store_message == "success":
print 'suceessfully returning'
return HttpResponse(serialized, mimetype="application/json")
else:
print 'failed!! returning'
return HttpResponseServerError(serialized, mimetype="application/json")
我用jquery让ajax提交
$(document).ready(function(){
$('#fileupoadform').submit(function(e){
submitUploadForm(e);
});
});
function submitUploadForm(e){
console.log('clicked submit');
e.preventDefault();
var file = $('#fselect').get(0).files[0];
console.log('filename='+file.name)
var data = { name:file.name };
var args = { type:"POST", url:"upload/", data:data, complete:doneAjaxUpload };
$.ajax(args);
}
当我尝试这个时,我得到了这个控制台输出
ajax_store_uploaded_file()
request= <WSGIRequest
GET:<QueryDict: {}>,
POST:<QueryDict: {u'name': [u'myfile.srt']}>,
COOKIES:{'csrftoken': 'ca367878345fa9e59adf79hg047a1dvb'},
...
is ajax and post
request.FILES= <MultiValueDict: {}>
to_return= {'store_message': 'failure'}
serialized= {"store_message": "failure"}
failed!! returning
[01/Jun/2012 11:27:26] "POST /myapp/upload/ HTTP/1.1" 500 28
我感觉到我在 django 视图中做错了什么。是我无法从request.FILES
获取上传的文件.在django view
non ajax version
,我能够从请求中获取文件。使用request.FILES['fselect']
的文件
有人可以帮助我解决这个问题吗?
我认为你不能(轻松地)进行ajax文件上传。
当然,看起来您实际上并没有将文件传递给您的帖子数据,您只是传递了文件名 -
var data = { name:file.name };
查看此问题以获取插件/信息以帮助执行此操作 - 如何异步上传文件?
相关文章:
- 在ng重复循环中显示来自不同文件夹的图像
- 为其他JS生成定义“;编译器”;来自TypeScript定义文件
- Javascript获取具有不同id的文件数's来自没有多个属性的文件输入元素
- 动态地包含来自外部文件PHP的JavaScript
- Yii2从js脚本的页面上添加来自供应商文件夹的图像、css、js文件
- 在PHP中检测AJAX请求来自哪个文件
- Jade-包含来自外部js文件的var
- 使用AJAX下载文件.来自SD卡
- 读取不带fs的txt文件nodejs(来自url)
- 传递来自<输入类型=“;文件“;id=“;文件“/>尽管还有一个按钮点击
- 如何在来自另一个文件的控制器中定义变量
- 高图表不显示来自csv文件的数据
- 需要来自单个JS文件的多个子模块与节点/组件.js
- 来自JS的Simperium和二进制(图像/视频)资产文件
- MVC Razor,包括来自另一个项目的JS/CSS文件
- 已编译的javascript文件(来自typescript)被添加到我的Visual Studio项目中
- 当一次加载所有文件时,是否有来自阵列的10个随机闪存文件显示在页面上?(在javascript中)
- 将供应商js文件(来自wrappebootstrap)合并到Rails4中
- Referesh JS文件来自另一个JS文件
- Django View 无法使用请求获取文件.来自 ajax 表单的文件提交