Django 批量保存图片文件 自定义上传方法
1.前端通过formData的方式批量增加图片或文件
for (var i = 0; i < form_img_list.length; i++) {
formData.append('image_file', form_img_list[i]);
}
AJAX写法
$('#submit_save_b').click(function (e) {
//formData 增加值
e.preventDefault()
console.log(form_img_list,33333);
for (var i = 0; i < form_img_list.length; i++) {
formData.append('image_file', form_img_list[i]);
}
formData.append('advertiser', $('#base_username_id').text());
formData.append('campaign_name', $('#adv_name_value').val());
formData.append('campaign_id', $('#adv_plan_value').val());
formData.append('data', $('#adv_des_value').val());
formData.append('title', $('#adv_title_value').val());
formData.append('ad_imp_type', $('#ad_imp_type').val());
formData.append('landing_url', $('#adv_landing_value').val());
formData.append('enable', 1);
formData.append('remove_img_list', remove_img_list);
console.log(formData);
var checkText = $("#id_select_ad_campaing").find("option:selected").text();
if (checkText == '请选择广告计划:') {
alert('请选择广告计划');
return false;
}
var csrftoken = getCookie('csrftoken');
$.ajax({
cache: false,
type: 'POST',
data: formData,
url: '/advertisement_list/',
traditional: true, //为必须内容
//dataType:'json', //data为json时必须
processData: false, //为必须内容
contentType: false, //为必须内容
success: function (data, textStatus, jqXHR) {
console.log(data);
if (jqXHR.status == 201) {
$('.page-content').fadeOut(300,function(){
$('.center').fadeIn(300)
})
show_list_table();
$('#Adver_Cell_Modal').modal('hide');
form_ad_campaing_reset();
}
},
beforeSend: function (xhr, settings) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
error:function(data){
console.log(222)
}
});
});
View写法
#获取多个文件
upload_images = request.FILES.getlist('image_file')
for a_index, afile in enumerate(upload_images):
#调用自定义上传文件方法
f_name, f_path = oss_storage.handle_uploaded_file(afile)
# 保证文件名不重复
current_time = time.time()
current_time = '{}_{}'.format(current_time, str(random.randint(1, 100))) image_url = 'http://liquid-xad.oss-cn-beijing.aliyuncs.com/{}/{}'.format('upload_test',
'{}_{}'.format(
current_time,
str(f_name))) oss_path = 'upload_test/{}'.format('{}_{}'.format(current_time, str(afile)))
f_path_name = '{}{}'.format(f_path, f_name)
upload_status = oss_storage.upload(oss_path, f_path_name)
print(upload_status) advertismen.ad_imp_type = p_ad_imp_type
advertismen.img_url = '' if a_index == 0:
advertismen.img_url_2 = image_url
advertismen.save()
os.remove(f_path_name) if a_index == 1:
advertismen.img_url_3 = image_url
advertismen.save()
os.remove(f_path_name) if a_index == 2:
advertismen.img_url_4 = image_url
advertismen.save()
os.remove(f_path_name) advertismen.save()
自定义上传方法
class Oss_Storage(object):
def handle_uploaded_file(self,f):
path = os.path.abspath(MEDIA_ROOT)
file_path = '{}/file/'.format(path)
BASE_DIR = file_path
try:
path = BASE_DIR
if not os.path.exists(path):
os.makedirs(path)
else:
file_name = str(path + f.name)
destination = open(file_name, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
except Exception as e:
print(e)
return f.name, path
Django 批量保存图片文件 自定义上传方法的更多相关文章
- python3-开发进阶补充Django中的文件的上传
PS:这段时间有点不在状态,刚刚找回那个状态,那么我们继续曾经的梦想 今天我们来补充一下文件的上传的几种方式: 首先我们先补充的一个知识点: 一.请求头ContentType: ContentType ...
- Django uplodify 多文件同时上传
Js代码: //批量上传按钮 $('#fileupload').uploadify ({ 'swf' : '/CoveragePlaform/media/uploadify-3.2/uploadify ...
- mac svn .a文件的上传方法
1.首先确认是否安装了Command Line Tools,如果没有,就Xcode-Preference-Downloads,选择Command Line Tools-install就可以了 2.打开 ...
- 图片base64格式转为file文件类型上传方法
日常使用文件上传方式,都是通过input type='file'的文件选择框进行文件上传.但是会通过其他交互方式等到图片的base64格式进行上传.具体情况如下示意: 在项目开发中,需要进行照片采集, ...
- element-ui el-upload http-request自定义上传方法
html <el-form-item class="upload-bg register-bg" prop="ad_url"> <div cl ...
- 使用django进行大文件的上传下载
下载 基于Django建立的网站,如果提供文件下载功能,最简单的方式莫过于将静态文件交给Nginx等处理,但有些时候,由于网站本身逻辑,需要通过Django提供下载功能,如页面数据导出功能(下载动态生 ...
- Django(十九)文件上传:图片上传(后台上传、自定义上传)、
一.基本设置 参考:https://docs.djangoproject.com/zh-hans/3.0/topics/http/file-uploads/ 1)配置project1/settings ...
- struts2 文件的上传下载 表单的重复提交 自定义拦截器
文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...
- 使用jQuery.FileUpload插件和服Backload组件自定义上传文件夹
在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? □ 在web.config中配置 1: <configuration> 2: <conf ...
随机推荐
- iOS 中的各种锁
在日常开发过程中,为了提升程序运行效率,以及用户体验,我们经常使用多线程.在使用多线程的过程中,难免会遇到资源竞争问题.我们采用锁的机制来确保线程安全. 线程安全 当一个线程访问数据的时候,其他的线程 ...
- Spring 3.0 AOP 之 AOP 术语 (一)
关于AOP.之前我已写过一个系列的随笔: <自己实现简单的AOP>,它的关注点在于实现.实现语言是C#,实现方式为 自定义实现 RealProxy 抽象类.重写Invoke方法,以便进行方 ...
- shell中$#等含义
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...
- 树莓派进阶之路 (024) - windows远程桌面连接树莓派通过xrdp服务(转)
本文转载:http://www.cnblogs.com/edgexie/p/6527992.html 在网上看到很多关于windows远程桌面连接树莓派的教程.我也按照教程试过了,遇到了几个坑.特意记 ...
- POJ 2296 Map Labeler (2-Sat)
Map Labeler Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1267 Accepted: 409 Descri ...
- 【Android】Android实现Handler异步详解
方式不止一种,这里使用的是Timer类,创建一个定时器.我们经常需要获得移动设备端口的显示屏信息,但是onCreate()方法执行的时候,OnShow()方法不一定执行了,也就是说,在执行Oncrea ...
- Swift 类
1.类概念 类是一种抽象的概念,它实际上并不存在于现实中的时间和空间里. 在定义一个类时,我们就会在类中定义该类事物的特性和行为,从术语上讲,特性叫类的属性,行为叫类的方法. 类是一个静态的概念,类本 ...
- centos yum源
#remi的源 rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm rpm --import /etc/pki/r ...
- getServletContext()接口解析(收藏)
javax.servlet.ServletContext接口 一个servlet上下文是servlet引擎提供用来服务于Web应用的接口.Servlet上下文具有名字(它属于Web应用的名字)唯一映射 ...
- 一步一步掌握线程机制(六)---Atomic变量和Thread局部变量
前面我们已经讲过如何让对象具有Thread安全性,让它们能够在同一时间在两个或以上的Thread中使用.Thread的安全性在多线程设计中非常重要,因为race condition是非常难以重现和修正 ...