ajax上传文件的三种方法

第一种xhr提交

  1. function xhrSubmit(){
  2. // $('#fafafa')[0]
  3. var file_obj = document.getElementById('fafafa').files[0];
  4. var fd = new FormData();
  5. fd.append('username','root');
  6. fd.append('fafafa',file_obj);
  7. var xhr = new XMLHttpRequest();
  8. xhr.open('POST', '/upload_file/',true);
  9. xhr.onreadystatechange = function(){
  10. if(xhr.readyState == 4){
  11. // 接收完毕
  12. var obj = JSON.parse(xhr.responseText);
  13. console.log(obj);
  14. }
  15. };
  16. xhr.send(fd);
  17. }

第二种jQuery的ajax提交

  1. function jqSubmit(){
  2. // $('#fafafa')[0]
  3. var file_obj = document.getElementById('fafafa').files[0];
  4. var fd = new FormData();
  5. fd.append('username','root');
  6. fd.append('fafafa',file_obj);
  7. $.ajax({
  8. url: '/upload_file/',
  9. type: 'POST',
  10. data: fd,
  11. processData: false, // tell jQuery not to process the data
  12. contentType: false, // tell jQuery not to set contentType
  13. success:function(arg,a1,a2){
  14. console.log(arg);
  15. console.log(a1);
  16. console.log(a2);
  17. }
  18. })
  19. }

jQuery的ajax默认会做字符拼接,为了能够让文件正常上传定义如下:

processData: false, // tell jQuery not to process the data

contentType: false, // tell jQuery not to set contentType

第三种就是利用ifram来进行上传文件

HTML文件

  1. <form id="form1" action="/upload_file/" method="POST" enctype="multipart/form-data" target="ifm1">
  2. <iframe id="ifm1" name="ifm1" style="display: none;"></iframe>
  3. <input type="file" name="fafafa" onchange="changeUpalod();" />
  4. {# <input type="submit" onclick="iframeSubmit();" value="Form提交"/>#}
  5. </form>
  1. function只需要写这些就行
  2. function iframeSubmit(){
  3. $('#ifm1').load(function(){
  4. var text = $('#ifm1').contents().find('body').text();
  5. var obj = JSON.parse(text);
  6. })
  7. }

views.py

  1. def upload_file(request):
  2. username = request.POST.get('username')
  3. fafafa = request.FILES.get('fafafa')
  4. import os
  5. img_path = os.path.join('static/imgs/',fafafa.name)
  6. with open(img_path,'wb') as f:
  7. for item in fafafa.chunks():
  8. f.write(item)
  9. ret = {'code': True , 'data': img_path}
  10. import json
  11. return HttpResponse(json.dumps(ret))

文件上传预览

  1. function changeUpalod(){
  2. $('#ifm1').load(function(){
  3. var text = $('#ifm1').contents().find('body').text();
  4. var obj = JSON.parse(text);
  5. $('#preview').empty();
  6. var imgTag = document.createElement('img');
  7. imgTag.src = "/" + obj.data;
  8. $('#preview').append(imgTag);
  9. });
  10. $('#form1').submit();
  11. }

python自动化之上传文件的3种方法和图片预览的更多相关文章

  1. python webdriver api-上传文件的三种方法

    上传文件: 第一种方式,sendkeys(),最简单的 #encoding=utf-8 from selenium import webdriver import unittest import ti ...

  2. GitHub常用上传文件的两种方法 附带常见的问题及Git安装教程

    从早上下课到现在一直在琢磨如何给Github下载本地文件,中午饭都没吃.还好是解决了,感觉挺有成就感的.O(∩_∩)O哈哈~ 好哒 闲话不说,说重点. 一.git的安装 百度云:http://pan. ...

  3. ASP.NET MVC上传文件的几种方法

    1.Form表单提交 <p>Form提交</p> <form action="@Url.Action("SavePictureByForm" ...

  4. JS实现上传图片的三种方法并实现预览图片功能

    地址:http://www.jb51.net/article/118660.htm js HTML5拖拽图片预览 地址:http://www.jb51.net/article/88803.htm js ...

  5. ASP.Net中上传文件的几种方法

    在做Web项目时,上传文件是经常会碰到的需求.ASP.Net的WebForm开发模式中,封装了FileUpload控件,可以方便的进行文件上传操作.但有时,你可能不希望使用ASP.Net中的服务器控件 ...

  6. ASP.NET上传文件的几种方法

      //上传文件实例 if (fileDealer.HasFile)//判断文件是否存在        {            string filepath = "";     ...

  7. net上传文件的三种方法

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关 ...

  8. SecureCRT 上传文件的两种方法 Zmodem、SFTP

    Zmodem: 无论有xshell还是secureCRT连接linux的时. 默认都用一个zmodem可以帮助window和linux之间传输文件 很方便和实用的工具. 不过默认是无法使用的 需要安装 ...

  9. Vue.js +pdf.js 处理响应pdf文件流数据,前端转图片预览不可下载

    使用场景及原因 实际业务中,一些说明书或协议仅支持用户在线预览,为避免用户自行下载,并进行修改,引发纠纷,特将文件已文件流的形式,传给前端并转为图片显示,此时可能会有人问,为什么不直接在后端转图片,前 ...

随机推荐

  1. Unix 高手的10个好习惯

    引言 当您经常使用某个系统时,往往会陷入某种固定的使用模式.有时,您没有养成以尽可能最好的方式做事的习惯.有时,您的不良习惯甚至会导致出现混乱.纠正此类缺点的最佳方法之一,就是有意识地采用抵制这些坏习 ...

  2. 使用vue+webpack打包时,去掉资源前缀

    在build文件夹下找到webpack.prod.conf.js文件,搜索 filename: utils.assetsPath('css/[name].[contenthash].css'), 将[ ...

  3. Stream grouping-storm的流分组策略

    A stream grouping tells a topology how to send tuples between two components. Remember, spouts and b ...

  4. 【代码笔记】iOS-左右可滑动的选择条

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  5. Django中间件解析

    一,中间件的概念 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法.在dja ...

  6. 使用tour_editor.html设置视角和添加热点

    控制初始视角 双击打开vtour文件夹中的tour_editor.html.(请先运行测试服务器,然后在浏览器地址栏中加上tour_editor.html,例如 http://localhost:52 ...

  7. c++之stringstream类的用法

    简介: 今天利用opecv提取每一帧图片并保存到本地指定目录下的时,对于保存的每一帧的图片希望第几帧体现在图片名中, 这里便用到了stringstream类的将数字转化为字符串这一功能 C++ Str ...

  8. Struts2中 Path (getContextPath与basePath)

    struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径. 虽然可以用redirect方式解决,但redirect方式并非必要.解决办法非常简单,统一使用绝对 ...

  9. stm32f103各个型号芯片之间程序移植(stm32的兼容问题)

    1.stm32f103系列的各个型号的芯片差别一般不大,都是一些flash大小不一样,一般是向下兼容(大容量芯片兼容中容量芯片)还有晶振大小不一样.                           ...

  10. shell_script1

    1.简介 2.read 3.运算工具 4.if/then结构 5.while循环 6.for循环   一.简介 1.什么是shell shell是用户与系统交互作用的界面.shell是一种命令解释程序 ...