精华内容
下载资源
问答
  • asp.net 怎么实现多张图片一起上传 有没有什么第三方控件可供使用
  • 带参数的多张图片一起上传

    千次阅读 2016-08-16 17:05:45
    使用AFN3.0上传带有参数的多张图片:首先有一个图片数组imageArr//遍历这个图片数组 for (UIImage *image in imageArray) {//将每张图片转化成data数据 NSData *imageData = UIImageJPEGRepresentation(tempImg, 0.3...

    使用AFN3.0上传带有参数的多张图片:

    首先有一个图片数组imageArr

    //遍历这个图片数组
    for (UIImage *image in imageArray) {
    
    //将每张图片转化成data数据                           
    NSData *imageData = UIImageJPEGRepresentation(tempImg, 0.3);
    
    //将转化后的data数据加入到一个可变数组中
    [imageSourceArr addObject:imageData];
    }
    
    //请求格式为二进制格式
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
    //网址字符串
    NSString *urlStr= @"";
    //上传所带的参数
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    //创建请求对象
    NSMutableURLRequest *request = [serializer multipartFormRequestWithMethod:@"POST" URLString:urlStr parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    //循环遍历imageSourceArr可变数组          
    [imageSourceArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    
         [formData appendPartWithFileData:obj name:@"imgs" fileName:@"imgs.jpg" mimeType:@"image/jpg"];
            }];
    
    } error:nil];
    //创建网络请求的管理类对象
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    //创建上传任务对象    
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress *uploadProgress) {
    
    } completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    
    }];
    
    [uploadTask resume];
    
    
    展开全文
  • 背景在有心课堂《自己动手写HTTP框架》课程中有下列课程:自拍要发朋友圈如何实现 http://stay4it.com/course/4/learn#lesson/208通过自己写的HTTP框架实现将图片和文字等内容在一个接口中提交到服务器。无论哪种...

    背景

    在有心课堂《自己动手写HTTP框架》课程中有下列课程:

    自拍要发朋友圈如何实现 http://stay4it.com/course/4/learn#lesson/208

    通过自己写的HTTP框架实现将图片和文字等内容在一个接口中提交到服务器。无论哪种网络框架,都要遵守HTTP协议。下面我们简单了解下HTTP协议。

    HTTP协议

    其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:

    • HTTP1.0对于每个连接都的建立一次连接一次只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;
    • HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。

    HTTP请求类型

    根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

    GET: 请求指定的页面信息,并返回实体主体。
    POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。

    HTTP请求格式

    当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:

    ① 请求方法 URI 协议/版本
    ② 请求头(Request Header)
    ③ 请求正文

    下面是一个HTTP请求的例子:

    20160820082113846

    • 请求方法URI协议/版本

    请求的第一行是“方法URL协议版本”:GET/sample.jsp HTTP/1.1

    如上面图片所示,“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

    URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

    • 请求头(Request Header)

    请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

    20160820082631863

    • 请求正文

    请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

    username=jinqiao&password=1234

    在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

    HTTP Post请求解析

    一个稍微完整的HTTP请求报文:

    这里写图片描述

    ①请求方法
    ②为请求对应的URL地址,它和报文头的Host属性组成完整的请求URL,③是协议名称及版本号。
    ④是HTTP的报文头,报文头包含若干个属性,格式为“属性名:属性值”,服务端据此获取客户端的信息。
    ⑤是报文体,它将一个页面表单中的组件值通过param1=value1&param2=value2的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求URL也可以通过类似于“/aremiyi/wonter.html? param1=value1&param2=value2”的方式传递请求参数。

    Accept、Cookie 、Referer等属于HTTP请求报文报文头,了解其含义或者更多报文头参考:http://blog.csdn.net/jdsjlzx/article/details/52259312

    HTTP multipart/form-data请求分析

    说完了Get、Post请求,我们来说说multipart/form-data请求,这也是这篇博客的核心。

    根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还会有multipart/form-data请求之说呢?这里简要说明下。

    http协议大家都知道是规定了以ASCII码传输,建立在tcp、ip协议之上的应用层规范,规范内容把http请求分为3个部门:请求方法 URI 协议/版本,请求头,请求正文。所有的方法、实现都是围绕如何运用和组织这三部分来完成的。

    也就是说http协议原始方法不支持multipart/form-data请求,那这个请求自然就是由这些原始的方法演变而来的,具体如何演变如下:

    1、multipart/form-data的基础方法是post,也就是说是由post方法来组合实现的
    2、multipart/form-data与post方法的不同之处:请求头,请求体。
    3、multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。具体的头信息如下:

    Content-Type: multipart/form-data; boundary=${bound}  

    //其中${bound} 是一个占位符,代表我们规定的分割符,可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。如:——————–56423498738365

    4、multipart/form-data的请求体也是一个字符串,不过和post的请求体不同的是它的构造方式,post是简单的name=value值连接,而multipart/form-data则是添加了分隔符等内容的构造体。具体格式如下:

    这里写图片描述

    其中${bound}为之前头信息中的分割符,如果头信息中规定为123,那么这里也要为123,;可以很容易看出,这个请求体是多个相同的部分组成的:每一个部分都是以–加分隔符开始的,然后是该部分内容的描述信息,然后一个回车,然后是描述信息的具体内容;如果传送的内容是一个文件的话,那么还会包含文件名信息,以及文件内容的类型。上面的第二个小部分其实是一个文件体的结构,最后会以–分割符–结尾,表示请求体结束。

    通过上面分析,可以知道要发送一个multipart/form-data的请求,其实任何支持post请求的工具或语言都可以支持,只是自己要稍微包装一下便可。同样,《自己动手写HTTP框架》里面的HTTP框架也是这么实现的,具体可以看看代码。

    下面我们结合具体的接口来分析multipart/form-data的请求。

    抓包分析

    课程中上传图片相关代码如下图所示:

    这里写图片描述

    从上面的代码中可以看出,把图片放在了列表中,图片描述放在了request.content中。

    通过对该方法运行时的网络请求抓包分析如下:

    这里写图片描述

    返回结果抓包分析如下:

    这里写图片描述

    从上图Contents项中可以看到有两个关键字段,分别是data和file0字段。

    这两个字段是怎么产生的呢?

    通过查看《自己动手写HTTP框架》相关代码,有如下方法:

    这里写图片描述

    这个是单张图片上传,紧接着看多张图片上传,代码如下:

    这里写图片描述

    通过对上面两段代码的比较,发现主区别在这个地方:

    这里写图片描述

    这个地方也是我们使用Retrofit上传的关键点所在,后面我们会再提到。

    上面分析了这么多,我们来看看怎么使用retrofit来实现。

    Retrofit实现文件和图片一起上传

    如果对retrofit不是很了解,参考:初识Retrofit

    定义接口

    在码小白的博客 Retrofit 2.0 超能实践,轻松实现多文件/图片上传 中有下面内容:

    图片和字符串同时上报

    这里写图片描述

    这种接口应该也是可以的,具体要怎么实现,都要与服务器接口保持一致,所以不能照搬照抄了。

    根据对有心课堂提供的上传图片接口的大量抓包和测试总结,接口定义如下:

    这里写图片描述

    这里用到了@Partmap注解,将图片文件信息放入map中。

    准备图片

    在sdcard根目录存放两张图片,分别为test.png和test.jpg(不要是gif图片啊,服务器不支持)

    代码实现

    这里就不贴代码了,截图如下(如果看不清,鼠标右键在新窗口打开就可以看到原图了):

    这里写图片描述

    关键代码在于:

    这里写图片描述

    看到这个是不是想起了上面我们提到的关键代码呢?下面再贴出来我们对比下。

    这里写图片描述

    只要将对应的http请求头信息填写正确,就能上传成功。

    那么问题又来了,怎么分析和正确拼写这个请求头呢?

    在文章开头的时候有个抓包信息:

    Content-Disposition: form-data; name="file0"; filename="test.png"

    实质上上传文件Requestbody对应的请求头就是 name=”file0”; filename=”test.png”,只要拼对了就没有问题了。

    注意:

    1. name=”file0”; filename=”test.png”这个请求头是根据有心课堂提供的上传接口写的,不适用其他上传接口,但原理是类似的;
    2. 单张图片上传通用的请求头是:name=”file”; filename=”test.png”
    3. filename=”test.png”这个一般是指(你希望)保存在服务器的文件名字。

    举例说明

    比如我们这样写请求头信息,如下代码所示:

    这里写图片描述

    运行请求抓包请求头信息如下图所示:

    这里写图片描述

    出现了name=”name=”file1”这样的字段,拼接错误(不用加name字段),服务器也毫不留情的返回了错误:

    这里写图片描述

    这个问题我当初没有发现,后来还是请教了Stay才搞明白了。

    好了,不知道我讲的大家明白了没有,最后来个成功运行的请求抓包截图吧:

    这里写图片描述

    关于文字类参数上传

    写到最后忘了说文字参数了,文字参数相对文件来说容易些。

    在接口中,我们有一个文字参数 @Part("data") String des,如果你需要多个,增加就行了。需要注意的是这个参数的名字比如”data”,不是前端自定义,而是后台定义的。

    代码托管地址:https://github.com/stay4it/RetrofitTutorial

    2016.8.19 凌晨

    展开全文
  • Retrofit普及后,最近好多人都在问,如何实现Retrofit上传多文件+文字需求(朋友圈发图片+文字) 解决方案 google: retrofit upload multiple files 说重点 与其直接说答案,不如我们花点时间说说多文件上传的...

    需求

    Retrofit普及后,最近好多人都在问,如何实现Retrofit上传多文件+文字需求(朋友圈发图片+文字)

    解决方案

    google: retrofit upload multiple files

    说重点

    与其直接说答案,不如我们花点时间说说多文件上传的原理,这样,以后就算出了其他的http框架,你也能快速实现。

    HTTP协议就不讲了吧?反正copy一段过来也不会有人看。我们就直接跳到文件上传去。想看也可以,传送门

    post form 表单

    Android Retrofit 实现文字(参数)和多张图片一起上传

     

    上图是不是很常见,在网页里选一个文件,点击上传。上传到哪里?服务器咯。web和移动端本质上有区别嘛?木有啊,就是一个前端展示的client。那服务器会为移动端创造一套独立的API嘛?显然他没那么傻。

    这个文件上传经常会伴随着其他fields一起上传。可以简单理解为表单上传。

    先来看下,如果没有文件,也不用json,单独上传一些key value怎么做?在Postman里可以这样模拟。

    Android Retrofit 实现文字(参数)和多张图片一起上传

     

    表单上传要注意的是

    1. content-type设为application/x-www-form-urlencoded
    2. form表单在streaming时是"weibo=stay4it&wechat=stay4it&qq=104816053"

    多文件上传

    实际上,多文件上传与form表单是一回事,一个key对应一个value。文件上传就是文件名key对应文件byte[] value,如下图postman模拟请求

    Android Retrofit 实现文字(参数)和多张图片一起上传

     

    只是如何标记一个key value的开始结束呢?用&分割肯定不够用啦。那就得用个特殊的boudary来做为分隔符。

    另外,这个content-type得为multiple/form-data

    好了。科普到此结束。简单理解HTTP协议以及form表单概念,相信接下来的代码你就不只是会调用,还能明白为什么。

    最原始的上传方式

    以前大家都用HttpUrlConnection,Stay在自己动手写HTTP框架-19课时详细讲过如何上传多文件以及进度更新。这里贴下核心代码:

    Android Retrofit 实现文字(参数)和多张图片一起上传

     

    以上这个UploadUtil,拿到outputstream,分别写入postContent以及List<FileEntity>,代码不多,相信大家都能看明白。

    抓个包看看

    请求数据抓包

    Android Retrofit 实现文字(参数)和多张图片一起上传

    上传的有两个form,
    一个content-typetext/plain key为data, value为stay4it
    一个content-typeimage/png key为file0, value为文件的bytes

    服务器如何接收的?(PHP版)

    Android Retrofit 实现文字(参数)和多张图片一起上传

     

    代码还算好懂,$_FILES就是请求上传的多文件,只要content-type设置为multiple/form-data,服务器接收是就会将其当成文件处理,将文件接收在$_FILES中,等待处理(存数据库,存硬盘或转七牛云等等),$this->data是表单中key为data所对应的valuestay4it。(以后再有服务器er告诉你分两个API上传,你就可以这么怼他了: )

    返回结果抓包

    Android Retrofit 实现文字(参数)和多张图片一起上传

    好了,原始的方式聊的差不多了,虽然代码看起来很多,但已经是个util类了,倒不是那么难用。但是我们还是希望在写代码时能尽可能少的去关注内部实现啊。什么multiple/form-data,什么boundary。真是很麻烦嘛。

    鸟枪换大炮吧

    以下Retrofit多文件上传内容由一叶飘舟大神提供。

    Retrofit实现文件和图片一起上传

    如果对retrofit不是很了解,参考:初识Retrofit

    定义接口

    根据对Stay自己动手写HTTP框架-19课时提供的上传图片接口的大量抓包和测试总结,接口定义如下:

    Android Retrofit 实现文字(参数)和多张图片一起上传

    这里用到了@Partmap注解,将图片文件信息放入map中。

    准备图片

    在sdcard根目录存放两张图片,分别为test.png和test.jpg(不要是gif图片啊,服务器不支持)

    代码实现

    这里就不贴代码了,截图如下(如果看不清,鼠标右键在新窗口打开就可以看到原图了):

    Android Retrofit 实现文字(参数)和多张图片一起上传

    关键代码在于:

    Android Retrofit 实现文字(参数)和多张图片一起上传

    看到这个是不是想起了上面我们提到的关键代码呢?下面再贴出来我们对比下。

    Android Retrofit 实现文字(参数)和多张图片一起上传

    只要将对应的http请求头信息填写正确,就能上传成功。

    那么问题又来了,怎么分析和正确拼写这个请求头呢?

    在文章开头的时候有个抓包信息:

    Content-Disposition: form-data; name="file0"; filename="test.png"

    实质上上传文件Requestbody对应的请求头就是 name="file0"; filename="test.png",只要拼对了就没有问题了。

    注意:

    1. name="file0"; filename="test.png"这个请求头是根据有心课堂提供的上传接口写的,不适用其他上传接口,但原理是类似的;
    2. 单张图片上传通用的请求头是:name="file"; filename="test.png"
    3. filename="test.png"这个一般是指(你希望)保存在服务器的文件名字。

    举例说明

    比如我们这样写请求头信息,如下代码所示:

    Android Retrofit 实现文字(参数)和多张图片一起上传

    运行请求抓包请求头信息如下图所示:

    Android Retrofit 实现文字(参数)和多张图片一起上传

    出现了name="name="file1"这样的字段,拼接错误(不用加name字段),服务器也毫不留情的返回了错误:

    Android Retrofit 实现文字(参数)和多张图片一起上传

    这个问题我当初没有发现,后来还是请教了Stay才搞明白了。

    好了,不知道我讲的大家明白了没有,最后来个成功运行的请求抓包截图吧:

    Android Retrofit 实现文字(参数)和多张图片一起上传

    关于文字类参数上传

    写到最后忘了说文字参数了,文字参数相对文件来说容易些。

    在接口中,我们有一个文字参数 @Part("data") String des,如果你需要多个,增加就行了。需要注意的是这个参数的名字比如"data",不是前端自定义,而是后台定义的。

    代码托管地址:https://github.com/stay4it/RetrofitTutorial

     


    来自:http://www.jianshu.com/p/3b8b2a0c0f30

    展开全文
  • jquery实现的图片单张多张上传的功能,有进度条,动画效果
  • 最近在做小程序的多图片上传+连同表单信息和图片服务器端地址一起保存到数据库中这项功能,但是发现小程序只支持一张一张的图片上传,即使用递归或者循环都必须调用上传图片的方法,如果上传图片时连同表单一块...

    多读多写多记录,多学多练多思考。----------- Banana • Banuit Gang(BUG香柚帮)


      最近在做小程序的多图片上传+连同表单信息和图片服务器端地址一起保存到数据库中这项功能,但是发现小程序只支持一张一张的图片上传,即使用递归或者循环都必须调用多次上传图片的方法,如果上传图片时连同表单一块提交持久化到数据库,那么就会保存多条记录,想了又想,最终思路就是把上传图片和提交表单分为两个方法,首先上传多张图片,在PHP后端单张上传成功后,返回给小程序一个服务器图片地址,然后小程序把地址保存到一个全局数组里边,当选择的图片和上传成功的图片相等时,再把数据转化为json,然后连同表单其他信息再调用上传信息的方法,持久化到数据库中就可以了。这只是我的思路,不知道还有什么好的方法可以解决这个问题呢。

    我单独整理了一个小栗子,大家可以下载学习一下,例子中包括填写表单,上传信息,展示信息

    GitHub地址:https://github.com/kun19911227/minipro.git

    upload_info.js

    //点击添加按钮选择多张图片
    chooseImage: function(e) {
       wx.chooseImage({
          sizeType: ['original', 'compressed'], //可选择原图或压缩后的图片
          sourceType: ['album', 'camera'], //可选择性开放访问相册、相机
          success: res => {
            if (this.data.images.length <= 1) {
              const images = this.data.images.concat(res.tempFilePaths)
              // 限制最多只能留下2张照片
              this.setData({
                images: images
              })
            } else {
              wx.showToast({
                title: '最多只能选择两张照片',
                icon: 'none',
                duration: 2000,
                mask: true
              })
            }
          }
       })
    }
    //上传图片和信息
    upload_info: function() {
        var images_list = []; //设置了一个空数组进行储存服务器端图片路径
            
        for (var i = 0; i < this.data.images.length; i++) {
            var that = this;
            wx.uploadFile({
                url: 'http://tq.com/index.php?g=api&m=user&a=upload_img', //上传图片接口地址
                filePath: this.data.images[i],
                name: 'photo',
                formData: null,
                success: function(res) {
                    // json转换数组
                    var jsonObj = JSON.parse(res.data)
                    images_list.push(jsonObj.url);//把每次返回的地址放入数组
                    if (that.data.images.length == images_list.length) {//当选中的图片和上传成功图片相等时,调用上传信息方法
                        var photo = JSON.stringify(images_list)//将数组转化为json
                        wx.request({
                            url: 'http://tq.com/index.php?g=api&m=fastcar&a=upload_info',
                            method : 'POST',
                            data: {
                                  name: that.data.name,
                                  sex: that.data.sex == '男' ? 1 : 2,
                                  age: that.data.age,
                                  phone: that.data.phone,
                                  id_number: that.data.idcard,
                                  is_member:1,
                                  condition: that.data.describe,
                                  photo: photo,
                                  expert_status: arr_str,
                                  expert_units: that.data.unit,
                                  expert_name: that.data.expert_name,
                                  cons_start_date: that.data.date,
                                  cons_end_date: that.data.date2,
                                  require_status: that.data.requires
                            },
                            header: {
                                "Content-Type": "application/x-www-form-urlencoded" 
                            },
                            success(res) {
    
                            }  
                        }) 
                        //console.log(photo);
                    }
                },
                fail: function(error) {
                    console.log(error);
                }
            })
        }
    }

     UserController.class.php

        /**
    	 * 上传信息api
    	 */
    	public function upload_info() {
    		$data = array();
    		$post = array();
    		//接收参数
    		$post['name'] = I('post.name');
    		$post['sex'] = I('post.sex');
    		$post['age'] = I('post.age');
    		$post['phone'] = I('post.phone');
    		$post['id_number'] = I('post.id_number');
    		$post['is_member'] = I('post.is_member');
    		$post['condition'] = I('post.condition');
    		$post['phpto'] = I('post.photo');
    		$post['expert_status'] = I('post.expert_status');
    		$post['expert_units'] = I('post.expert_units');//非必填
    		$post['expert_name'] = I('post.expert_name');//非必填
    		$post['cons_start_date'] = I('post.cons_start_date');
    		$post['cons_end_date'] = I('post.cons_end_date');
    		$post['require_status'] = I('post.require_status');
    		$post['create_time'] = time();
    
    		if ( (empty($post['user_id']) && isset($post['user_id'])) ||
    			(empty($post['name']) && isset($post['name'])) ||
    			(empty($post['sex']) && isset($post['sex'])) ||
    			(empty($post['age']) && isset($post['age'])) ||
    			(empty($post['phone']) && isset($post['phone'])) ||
    			(empty($post['id_number']) && isset($post['id_number'])) ||
    			(empty($post['is_member']) && isset($post['is_member'])) ||
    			(empty($post['condition']) && isset($post['condition'])) ||
    			(empty($post['rop']) && isset($post['rop'])) ||
    			(empty($post['expert_status']) && isset($post['expert_status'])) ||
    			(empty($post['cons_start_date']) && isset($post['cons_start_date'])) ||
    			(empty($post['cons_end_date']) && isset($post['cons_end_date'])) ||
    			(empty($post['require_status']) && isset($post['require_status'])) ) {
    			$data['code'] = 0;
    			$data['msg'] = "有必填参数为空";
    		} else {
    
    			$result = D('User')->add($post);
    
    			if ($result !== false) {
    				$data['code'] = 1;
    				$data['msg'] = "提交成功";
    			} else {
    				$data['code'] = 2;
    				$data['msg'] = "提交失败";
    			}
    
    
    		}
    		return $this->ajaxReturn($data);
    	}
    
    	/**
    	 * 上传图片
    	 */
    	public function upload_img() {
    		$data = array();
    		$uploadConfig = array(
    			'FILE_UPLOAD_TYPE' => sp_is_sae() ? 'Sae' : 'Local',
    			'rootPath' => './'.C( 'UPLOADPATH' ),
    			'savePath' => './minipro/',
    			'saveName' => array( 'uniqid', '' ),
    			'exts' => array( 'jpg', 'jpeg', 'png','gif' ),
    			'autoSub' => false
    		);
    		$upload = new \Think\Upload( $uploadConfig );
    		$info = $upload->upload();
    		if($info) {
    			$save_name = $info['photo']['savepath'].$info['photo']['savename'];
    			$save_name = substr($save_name,1);
    			$url = "http://".$_SERVER['HTTP_HOST']."/data/upload".$save_name;
    			$data['url'] = $url;
    			return $this->ajaxReturn($data);
    		}
    	}
    

     

    展开全文
  • tp5上传多张图片

    2019-12-25 14:09:17
    上传多张图片,重点在于处理图片的整个的过程逻辑,在添加商品的时候,同时上传多张图片。 首先分析问题,上传商品,需要一个商品表product,存商品的详细信息;上传图片,需要一个图片 表img,来存图片的路径等...
  • 传统的vue上传组件,多张图片会提交多个请求到后台,这种显然不可取,我们要实现的就是 一次请求后台同时将多张图片和表单提交到后台。主要策略就是 : 1. 图片组件上传不提交 2 。使用FormData来将 图片和表单提交...
  • } else if (i ) {//若图片还没有传完,则继续调用函数 that.btn_up() } } }) }, onLoad: function (options) { }, onShow: function () { only_num = 'jt' + Math.round(new Date() / 1000); i = 0 }, ...
  • 【Java】SpringMVC实现多张图片上传实例

    万次阅读 热门讨论 2017-05-24 14:23:45
    需求是将多张或单张图片上传至某个文件夹下,同时保存在数据库中和服务器上。现在我将会展现完整例子。 1、前提:在pom中添加相关的jar包。 commons-fileupload commons-fileupload 1.3.2 2、SpringMVC 用的是...
  • 是这样的,最近做一个公众号上传图片的问题,我已经做好了上传一张图片的功能。图片上传后是可以下载到...现在的问题是,要求上传4张图片,然后全部可以下载到服务器里,不知道有没有大神做过,求个具体的代码,谢谢!
  • 对于微信小程序上传图片其实很麻烦的,每次只能上传一张,所有很多朋友就会问想要多张图片上传怎么办?这里使用递归,当上传完一张图片后重新执行这个函数,直到所有的图片上传完成后,就不再调用该函数了。具体的...
  • 主要为大家详细介绍了微信小程序实现同时上传多张图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 上传张图片 @Multipart @POST("invitation/upload") Flowable<BaseResponse> uploadImage(@Part MultipartBody.Part part); 然后进行调用 val file = File(selectList!![i].compressPath) val ...
  • 扫描二维码,进入首页,找到“小程序演示”,表单类&gt;林羽凡表单及多张图片上传提交演示,点击进入即可。     注: 后端有PHP的上传类,需要的联系我。...
  • 关于多张图片上传处理方法

    千次阅读 2014-10-31 11:54:53
    关于多张图片上传处理方法:
  • TP5+bootstrap管理后台,多张图片上传应用 最近项目管理后台要整改,... 1、首先,商品上传多张图片,不能和商品其他信息一起表单提交。那么只能用jQuery来提交,但是jQuery的$.post{}和$.ajax提交不能提交文件(视...
  • 微信小程序多张图片上传

    万次阅读 2018-07-19 12:38:59
    微信小程序上传图片每次只能上传一张,所有很多朋友就会问想要多张图片上传怎么办? 这里使用递归,当上传完一张图片后重新执行这个函数,直到所有的图片上传完成后,就不再调用该函数。 首先,我们来看一看wx....
  • 最近在写基于mpvue小程序,需要多张图片上传。因为小程序不支持数组的多张图片同时上传,然后根据自己的需求+面向百度开发,参考各位大神的案例,总算搞定。分享下,不足之处,多多指教 直接上代码吧 多张图片上传...
  • Django Admin 上传多张图片并显示缩略图 1.效果预览 需要的python库:因为要处理图片,必须安装pillow库。 2.自定义Widget django Admin使用的图片上传Widget是: <input type='file'> 非常丑陋,...
  • Vue+axios+formdata实现多张图片上传

    千次阅读 2018-11-29 14:49:18
    &lt;p&gt;选择图片附件&lt;/p&gt; &lt;div class="upload"&gt; &lt;div class="upload_warp_left" @click="fileClick"...上传图片&lt;/button&a
  • 可以进行图片多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 。很不错的源码,大家有需要可以下载看看 。 如果不知道如何上传文件,参考: ...
  • 复制代码立即可用,只需更改data中的图片上传的接口就可以了 1、demo.vue <template> <div class="demo"> <div class="demo-upload-list" v-if="hasImage"> <img :src="imageUrl" />...
  • js input file 多图片上传,一次性上传多张图片(前端预览功能); 运用js实现上传图片前的预览(支持多张图片),网上很多案例都是没有处理每个上传的图片文件名,这里我就增加了图片文件名的方法,希望亲们可以在...
  • 因为是多图片同时上传,而且考虑到用户可能会更换已经选择的图片,所以没办法做到用户input[type="file"]选择一次图片就上传图片到服务器,必须是等到用户选择完毕后再一起上传。 比如用户这时候选择了5张图片,...
  • 业务需求,通过上传多张图片给服务器,并且返回访问地址。 废话不多说开搞。 第一步 首先我们要安装Nginx,修改Nginx的config文件(Nginx安装配置过程不是本篇文章的重点) 添加如下内容: location /imgs { root ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,076
精华内容 32,430
关键字:

多张图片怎么一起上传