学习了 django 的 ajax 方式上传图片

今天终于搞定了 django 的 ajax 方式上传图片。

客户端我用的是 jQuery 的插件 AjaxFileUpload, 其原理是动态创建一个 iframe 和一个 form, 将 <input type="file" /> 控件的内容插入到 form 中,然后向那个 iframe 提交。当然这里 iframe 通过样式设置为不可见的了。

调试的过程中出现了很多低级错误,但因为 ajax 方式很难调试,花费了不少的时间才搞定,中间连 Visual Studio 2005 都用上了,用于调试 JavaScript. 下面把错误记录下来给自己以后提个醒:

1. fileElementId 注意不要在前面加上 '#', 否则会找不到控件(用 jQuery 时间久了很容易犯这个错误)。

2. <input type="file" /> 控件一定要加上 name 属性!因为这个没加表单将不会发送任何有效的文件数据。低级错误啊~

3. 其他需要在文件上传时同时发送的字段,可以考虑拼接成一个字符串,加到 url 里面用 get 的方式发送到服务器。当然,要记得字段内容用 encodeURIComponent 函数预先处理。

下面附上一点主要的客户端调用代码:
$.ajaxFileUpload
(
    {
        url:'
/ popup / note / image_upload /? +  postData,
        secureuri: 
false ,
        fileElementId: fileElementId,
        dataType: 'json',
        success: 
function  (data, status)
        {
            
if ( typeof (data.error)  !=  'undefined'){
                
if (data.error  !=  '')
                    alert(data.error);
                
else
                    alert(data.msg);
            }
        },
        error: 
function  (data, status, e)
        {
            alert(e.description);
            
for (k  in  data) alert(data[k]);
            alert(status);
        }
    }
)

有的时候文件的 name 是动态产生的,那么在服务器端, django 的 view 中,可以改用一种办法来获取上传文件的内容,而不需要知道控件的 name:
file_obj  =  request.FILES.values()[0]
而我们平常写的最多的是这样的:
file_obj  =  request.FILES.get( ' file1 ' , None)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值