精华内容
下载资源
问答
  • 上传多个头像,同时上传多张图片多上传,直接上代码!下载就可以直接测试!
  • js动态上传多张图片

    2018-11-16 16:45:14
    纯js上传图片,可在图片可添加删除图片,可上传多张图片。如有疑问可关注微信公众号“程序媛宝典”
  • c# 上传多张图片

    2013-06-30 11:36:43
    c# 上传多张图片
  • ng-flow上传多张图片

    2016-08-14 22:13:37
    ng-flow 上传多张图片
  • android上传多张图片

    千次阅读 2018-11-30 21:26:58
    这就涉及到多张图片上传问题。 后台接口文档如下: 使用Retrofit+Rxjava上传多张图片的代码如下: /** * 上传多张图片(带参数) */ public void uploadMoreImage2(RetrofitSubscriber<BaseRspBean...

    项目中有一个功能:发帖。

    帖子内容:文字,图片(可以是多张)。这就涉及到多张图片的上传问题。

    后台接口文档如下:

    使用Retrofit+Rxjava上传多张图片的代码如下:

    /**
     * 上传多张图片(带参数)
     */
    public void uploadMoreImage2(RetrofitSubscriber<BaseRspBean<ImageUploadBean>> subscriber, List<File> imageFileList){
        List<MultipartBody.Part> photos = new ArrayList<>(imageFileList.size());
        //上传图片时携带参数,这里用于区分是帖子图片还是其他图片,比如头像等
        RequestBody imageType = RequestBody.create(MediaType.parse("text/plain"), "post");
        MultipartBody.Part body = MultipartBody.Part.createFormData("type",null, imageType);
        photos.add(body);
        //文件(注意与上面的不同)
        if(imageFileList != null && !imageFileList.isEmpty()) {
            for (File file:imageFileList){
                RequestBody photoRequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
                MultipartBody.Part part= MultipartBody.Part.createFormData("files", file.getName(), photoRequestBody);
                photos.add(part);
            }
        }
        RetrofitUtil.toSubscribe(getServiceOutHead(UrlConfig.BASEURL).uploadMoreImage2(HeaderHelper.getFileUpdateHeader(),photos),mContext, subscriber);
    }

     

    当然了,上传的图片需要经过压缩处理才能上传。(我们的图片是从本地相册选择的或者是拍照所得的)

    压缩方法:

     

    Bitmaputils.java
    /**
     * 图片压缩-质量压缩
     *
     * @param filePath 源图片路径
     * @return 压缩后的路径
     */
    
    public static String compressImage(String filePath) {
        //原文件
        File oldFile = new File(filePath);
        //压缩文件路径 照片路径/
        String targetPath = oldFile.getPath();
        int quality = 50;//压缩比例0-100
        Bitmap bm = getSmallBitmap(filePath);//获取一定尺寸的图片
        int degree = getRotateAngle(filePath);//获取相片拍摄角度
        if (degree != 0) {//旋转照片角度,防止头像横着显示
            bm = setRotateAngle(degree,bm);
        }
        File outputFile = new File(targetPath);
        try {
            if (!outputFile.exists()) {
                outputFile.getParentFile().mkdirs();
            }
            FileOutputStream out = new FileOutputStream(outputFile);
            bm.compress(Bitmap.CompressFormat.JPEG, quality, out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            return filePath;
        }
        return outputFile.getPath();
    }
    
    /**
     * 根据路径获得图片信息并按比例压缩,返回bitmap
     */
    public static Bitmap getSmallBitmap(String filePath) {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;//只解析图片边沿,获取宽高
        BitmapFactory.decodeFile(filePath, options);
        // 计算缩放比
        options.inSampleSize = calculateInSampleSize(options, 480, 800);
        // 完整解析图片返回bitmap
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(filePath, options);
    }
    
    public static int calculateInSampleSize(BitmapFactory.Options options,
                                            int reqWidth, int reqHeight) {
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
            final int heightRatio = Math.round((float) height / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return inSampleSize;
    }
    
    /**
     * 旋转图片角度
     *
     * @param angle
     * @param bitmap
     * @return
     */
    public static Bitmap setRotateAngle(int angle, Bitmap bitmap) {
    
        if (bitmap != null) {
            Matrix m = new Matrix();
            m.postRotate(angle);
            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
                    bitmap.getHeight(), m, true);
            return bitmap;
        }
        return bitmap;
    }
    

    以上就是上传多张图片的逻辑。

    展开全文
  • 页面上传多张图片并显示,可删除可指定上传多
  • 之前的thinkphp3.2.2上传多张图片功能在thinkphp3.2.3上实现
  • 主要为大家详细介绍了微信小程序实现上传多张图片、删除图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了TP5框架实现上传多张图片的方法,结合实例形式分析了TP5上传多张图片相关的视图、模型、控制器操作技巧,需要的朋友可以参考下
  • 里面包含两个thinkphp+swfupload上传多张图片实例,需要的可以下载,按照自己的需要进行修改
  • 主要为大家详细介绍了微信小程序实现同时上传多张图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • axios上传多张图片

    千次阅读 2019-10-23 10:41:46
    项目使用的axios做异步提交,现在需要上传多张图片至后台,但是后台接收不到图片参数,而其他参数却能得到 2.问题 普通提交方式无法提交图片数组的(转化成字符串,序列化传输会出问题) 3.解决办法 使用表单格式...

    1. 场景

    项目使用的axios做异步提交,现在需要上传多张图片至后台,但是后台接收不到图片参数,而其他参数却能得到

    2. 问题

    普通提交方式无法提交图片数组的(转化成字符串,序列化传输会出问题)
    在这里插入图片描述

    3.解决办法

    在这里插入图片描述
    使用表单格式提交,注意设置header内容格式
    注意:不要直接将图片数组赋值给FormData对象的属性,否则同样传输不了数据,一定要遍历添加
    在这里插入图片描述

    展开全文
  • 上传多张图片到服务器,对图片进行压缩上传
  • 主要介绍了Android ksoap调用webservice批量上传多张图片详解的相关资料,需要的朋友可以参考下
  • 同时上传多张图片

    2016-01-11 15:51:37
    支持同时勾选多张多上传的简单例子,类似于微信上传图片是同时勾选图片的简单功能,本例子,简单易学
  • 主要为大家详细介绍了js异步上传多张图片插件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 上传多张图片并预览

    千次阅读 2017-06-26 14:54:26
    上一篇写的是上传张图片并预览,因为需求不一样,也顺便百度了一下上传多张图片并预览的,整理了一个demo,存一下,留着用。 不兼容IE。 实现效果:上传多张图片并预览; #divUL div{ float...

    上一篇写的是上传单张图片并预览,因为需求不一样,也顺便百度了一下上传多张图片并预览的,整理了一个demo,存一下,留着用。

    不兼容IE。

    实现效果:上传多张图片并预览;

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<style type="text/css">
    			#divUL div{
    				float: left;
    			}
    			
    		</style>
    	</head>
    	<body>
    		<div class="wrapper">
    			<input type="file" multiple="multiple" name="listInput" id="listInput" value="" />
    			<div id="divUL">
    				
    			</div>
    		</div>
    	</body>
    	<script type="text/javascript">
    		
    		//多张
    		document.getElementById("listInput").addEventListener("change",function(){
    			var files = this.files;
    			var oUL = document.getElementById("divUL");
    			oUL.innerHTML = "";
    			for(var i = 0;i < files.length;i++){
    				oUL.innerHTML += '<div><img id="img'+i+'" /></div>'
    				var imgList = document.getElementById("img"+i);
    				imgList.style.height = "200px";
    				imgList.style.width = "200px";
    				imgList.src = window.URL.createObjectURL(files[i]);
    			}
    		});	
    
    	</script>
    </html>
    


    展开全文
  • 多张图片上传 使用jQuery,Ajax和PHP上传多个图像 在YouTube上观看:-https: 预习 :- 查看图像预览:-
  • 主要介绍了android 使用OkHttp上传多张图片的相关资料,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了Android 通过webservice上传多张图片到指定服务器详解的相关资料,需要的朋友可以参考下
  • php同时上传多张照片代码

    热门讨论 2010-03-31 11:55:57
    关于php语言编写的同时上传多张照片源代码设计
  • Flutter上传多张图片

    千次阅读 2020-03-09 14:40:26
    最近研究了几天上传图片,看了视频资料后上传一张图片是没问题了,自己有深究了一下一次上传多张图片的情况,自己琢磨出个思路~ 首先引入依赖:image_picker,当然还有别的大家可以自行选择,有个multy_image_...

    2020-10-22更新:刚刚发布了一篇博客,一次性选择多张图片上传的demo,有需要的童鞋可以参考一下,下面附上链接:

    https://blog.csdn.net/Gemini_Kanon/article/details/109215163

    最近研究了几天上传图片,看了视频资料后上传一张图片是没问题了,自己有深究了一下一次上传多张图片的情况,自己琢磨出个思路~

    首先引入依赖:image_picker,当然还有别的大家可以自行选择,有个multy_image_picker依赖也可以,是一次选择多张图片的~然后在你需要上传的文件中引入文件:import 'package:image_picker/image_picker.dart';和import 'dart:io';接下来是代码:

    3月11日:更新上传照片和删除图片代码,下面是全部代码

    import 'package:flutter/material.dart';
    
    import 'package:image_picker/image_picker.dart';
    import 'dart:io';
    import 'package:dio/dio.dart';
    import 'package:Config.dart';
    import 'package:fluttertoast/fluttertoast.dart';
    import 'package:rflutter_alert/rflutter_alert.dart';
    
    class SignCommitPage extends StatefulWidget {
      final arguments;
    
      SignCommitPage({Key key, this.arguments}) : super(key : key);
      _SignCommitPageState createState() => _SignCommitPageState(this.arguments);
    }
    
    class _SignCommitPageState extends State<SignCommitPage> {
      final arguments;
      _SignCommitPageState(this.arguments);
    
      //控制listview滚动条
      ScrollController _controller = new ScrollController();
      //用来存放图片的容器
      List _img = new List();
      //File类型,用来上传图片
      File _image;
      //用来存放上传的图片返回的id,后面删除图片用
      List _imgId = new List();
    
      //输入框组件
      Widget _textFieldWidget () {
        //listview滚动条保持在最后
        Timer(Duration(milliseconds: 0), () => _controller.jumpTo(_controller.position.maxScrollExtent));
        return Container(
          padding: EdgeInsets.only(left: ScreenAdapter.width(20.0), right: ScreenAdapter.width(20.0)),
          child: Column(
            children: <Widget>[
              Row(
                children: <Widget>[
                  this._img == null ? Expanded(
                    flex: 1,
                    child: Text(""),
                  ) : Expanded(
                    flex: 1,
                    child: Container(
                      width: double.infinity,
                      height: ScreenAdapter.width(150.0),
                      child: ListView.builder(
                        controller: _controller,   //滚动条控制
                        shrinkWrap: true,
                        scrollDirection: Axis.horizontal,
                        itemCount: this._img.length,   //循环_img渲染出listview
                        itemBuilder: (context, index){
                          return InkWell(
                            child: Container(
                              width: ScreenAdapter.width(150.0),
                              height: ScreenAdapter.width(150.0),
                              margin: EdgeInsets.only(right: ScreenAdapter.width(10.0)),
                              decoration: BoxDecoration(
                                  borderRadius: BorderRadius.circular(4.0),
                                  border: Border.all(
                                    style: BorderStyle.solid,
                                    color: Colors.black26,
                                  )
                              ),
                              //隐藏id值,删除图片时可以直接获取到对应图片id
                              child: Visibility(
                                visible: false,
                                replacement: Image.network(this._img[index], fit: BoxFit.cover,),
                                child: Text(this._imgId[index]),
                              )
                            ),
                            //长按删除图片
                            onLongPress: (){
                              Alert(
                                context: context,
                                type: AlertType.info,
                                title: "确定删除这张照片吗?",
                                buttons: [
                                  DialogButton(
                                    child: Text(
                                      "确定",
                                      style: TextStyle(color: Colors.white, fontSize: 20),
                                    ),
                                    onPressed: () async {
                                      //删除图片方法,将要删除的图片名称和id传递过来
                                      _deleteImg(this._img[index], this._imgId[index]);
                                      Navigator.of(context).pop();
                                    },
                                  ),
                                  DialogButton(
                                    child: Text(
                                      "取消",
                                      style: TextStyle(color: Colors.white, fontSize: 20),
                                    ),
                                    onPressed: () => Navigator.of(context).pop(),
                                  )
                                ],
                              ).show();
                            },
                          );
                        },
                      ),
                    ),
                  ),
                  InkWell(
                    child: Container(
                      width: ScreenAdapter.width(150.0),
                      height: ScreenAdapter.width(150.0),
                      margin: EdgeInsets.only(right: ScreenAdapter.width(10.0)),
                      decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(4.0),
                          border: Border.all(
                            style: BorderStyle.solid,
                            color: Colors.black26,
                          )
                      ),
                      child: Center(
                        child: Icon(Icons.camera_alt),
                      ),
                    ),
                    onTap: _openGallery,
                  )
                ],
              )
            ]
          )
        );
      }
    
      //选择相册照片&上传
      void _openGallery () async {
        var imageUrl = await ImagePicker.pickImage(source: ImageSource.gallery, maxHeight: ScreenAdapter.width(150.0), maxWidth:ScreenAdapter.width(150.0));
        setState(() {
          //将获取到的图片路径赋给_image,上传
          this._image = imageUrl;
        });
        //上传开始
        String path = imageUrl.path;
        //获取文件名
        String imgName = path.substring(path.lastIndexOf("/") + 1, path.length);
        //获取格式
        String suffix = imgName.substring(imgName.lastIndexOf(".") + 1, imgName.length);
        FormData formData = new FormData.from({
          "userId" : "123456",
          "file" : new UploadFileInfo(this._image, imgName)
        });
        var res = await Dio().post("${Config.domain}uploadImg", data: formData);
        if (res.data["success"]) {
          Fluttertoast.showToast(
              msg: "${res.data["message"]}",
              gravity: ToastGravity.CENTER,
              timeInSecForIos: 3
          );
          setState(() {
            //将返回的图片路径和对应id添加到_img和_imgId中
            this._img.add("${Config.domain}" + "${res.data["data"]}");
            this._imgId.add("${res.data["id"]}");
          });
        } else {
          Fluttertoast.showToast(
              msg: "${res.data["message"]}",
              gravity: ToastGravity.CENTER,
              timeInSecForIos: 3
          );
        }
      }
    
      //删除图片
      void _deleteImg (img, id) async {
        //请求后端方法
        var api = "${Config.domain}deleteImg?id=" + id;
        var res = await Dio().get(api);
        if (res.data["success"]) {
          Fluttertoast.showToast(
              msg: "${res.data["message"]}",
              gravity: ToastGravity.CENTER,
              timeInSecForIos: 3
          );
          //成功的话将该图片和对应id分别从_img和_imgId中移除
          setState(() {
            this._img.remove(img);
            this._imgId.remove(id);
          });
        } else {
          Fluttertoast.showToast(
              msg: "${res.data["message"]}",
              gravity: ToastGravity.CENTER,
              timeInSecForIos: 3
          );
        }
      }
    
      //页面
      @override
      Widget build(BuildContext context) {
        ScreenAdapter.init(context);
        return Scaffold(
          appBar: AppBar(
            leading: InkWell(
              child: Icon(Icons.keyboard_return),
              onTap: (){
                Navigator.pop(context);
              },
            ),
            title: Text("上传图片"),
          ),
          body: ListView(
            children: <Widget>[
              _textFieldWidget(),
            ],
          ),
        );
      }
    }
    
    
    
    //Config.dart
    class Config {
      //域名定义成自己的即可
      static String domain = "http://www.haha.com/";
    }

    后端代码,小编的后端是java:

    //直接用@RestController了,前后端分离直接返回json数据就好了
    @RestController
    //一定要有这个注解,下面讲作用
    @MultipartConfig
    public class AppController {
        //引包小编就不贴了,现在编程软件一般都有提示
        @Autowired
        private HttpServletRequest request;
    
        //上传图片
        String filesPath = "";
        @RequestMapping(value = "/uploadImg", method = RequestMethod.POST)
        public AppResult uploadImg (HttpServletRequest request) {
            try {
                //此处要提到上面@MultipartConfig注解了,flutter向后端post数据时,一般的字符串数据可以直接通过request.getParameter("xxx")获取到,但是无法获取图片,获取为null
                //此处和request.getParameter("xxx")一样,你传的文件的key
                Part part = request.getPart("file");
                //获取文件名
                String fileNames = getFileName(part);
                //这里小编把文件重命名了一下,以免重名
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmsssss");
                String id = sdf.format(new Date());
                String[] splitName = fileNames.split("\\.");
                String finalName = id + "." + splitName[splitName.length - 1];
                //上传文件
                filesPath = writeTo(finalName, part);
                //这里可以实现你自己的逻辑,可以与数据库交互等等
                return AppResult.success(true, "上传成功", 返回图片路径, 返回图片id);
            } catch (IOException ie) {
                ie.printStackTrace();
                return AppResult.error(false, "网络错误,请稍后重试");
            } catch (ServletException se) {
                se.printStackTrace();
                return AppResult.error(false, "上传失败,请稍后重试");
            }
        }
    
        //获取文件名
        private String getFileName(Part part) {
            String head = part.getHeader("Content-Disposition");
            String fileName = head.substring(head.indexOf("filename=\"")+10, head.lastIndexOf("\""));
            return fileName;
        }
    
        //写文件
        private String writeTo(String finalName, Part part) throws IOException {
            String path = request.getSession().getServletContext().getRealPath("/uploadAppVisit");
            if (!new File(path).exists() || !new File(path).isDirectory()) {
                new File(path).mkdirs();
            }
            InputStream in = part.getInputStream();
            OutputStream out = new FileOutputStream(path + "/" + finalName);
            byte[] b = new byte[1024];
            int length = -1;
            while((length = in.read(b)) != -1){
                out.write(b, 0, length);
            }
            in.close();
            out.close();
            return finalName;
        }
    
        //删除图片
        @RequestMapping(value = "/deleteImg", produces={"application/json;charset=UTF-8"})
        public AppResult deleteImg (String id) {
            try {
                //这里是删除方法,换成自己的
                hahaService.deleteById(id);
                return AppResult.ok(true, "删除成功", "");
            } catch (Exception e) {
                e.printStackTrace();
                return AppResult.error(false, "删除失败请重试");
            }
        }
    }
    
    
    
    //AppResult.java,这里定义一个实体类用来返回结果,避免每个方法都要自己写一遍,也方便修改
    public class AppResult {
        private boolean success;
        private String message;
        private Object data;
        private String id;
    
        public boolean isSuccess() {
            return success;
        }
    
        public void setSuccess(boolean success) {
            this.success = success;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public AppResult (boolean success, String message) {
            this.success = success;
            this.message = message;
        }
    
        public AppResult (boolean success, String message, Object data) {
            this.success = success;
            this.message = message;
            this.data = data;
        }
    
        public AppResult (boolean success, String message, Object data, String id) {
            this.success = success;
            this.message = message;
            this.data = data;
            this.id = id;
        }
    
        public static AppResult ok (boolean success, String message, Object data) {
            return new AppResult(success, message, data);
        }
    
        public static AppResult success (boolean success, String message, Object data, String id) {
            return new AppResult(success, message, data, id);
        }
    
        public static AppResult error (boolean success, String message) {
            return new AppResult(success, message);
        }
    }
    

     

    //同时上传多张照片获取方法,有时间把上传照片详细代码更上来
    Collection<Part> parts = request.getParts();
    if (parts.size()>0) {
        String str="";
        for (Part part : parts) {
            if (part.getName().startsWith("file")) {
                String fileNames = getFileName(part);
                String path = writeTo(fileNames, part);
                str += xxx;
            }
        }
    }

    选择图片实现,如下图:

    选择图片前:

    选择图片后:

    到这里选择图片上传和删除图片全部实现,各位可以直接拿走使用,里面还有个地图定位的功能这里没写,在这篇https://blog.csdn.net/Gemini_Kanon/article/details/104628500博客里有~如果哪里代码有错误搞不出来可以联系小编帮忙!

    这些代码是小编自己琢磨加找资料编写的,如果有错误请指出,哪位兄台有更好的方法小编想随时虚心请教~

    展开全文
  • 一次性上传多张图片

    2013-04-01 08:43:41
    C#一次性可以上传多张图片,代码清晰明了,一看就会。
  • 主要介绍了PHP结合jquery ajax实现上传多张图片,并限制图片大小操作,涉及php结合jQuery ajax文件上传及文件属性相关操作技巧,需要的朋友可以参考下
  • 封装七牛上传多张图片方法 一般用于朋友圈之类的上传多张图片,图片上传完后,将图片名传给后台服务器github地址:https://github.com/yy342901/YYQiuNiuUpload 有需要的直接下载
  • asp.net上传多张图片

    热门讨论 2007-06-27 15:06:30
    asp.net上传多张图片,点一下按钮增加一个上传图片控件
  • 本篇文章主要介绍了Android上传多张图片的实例代码(RxJava异步分发),具有一定的参考价值,有兴趣的可以了解一下
  • php上传多张图片示例

    热门讨论 2008-12-22 13:59:36
    php上传多张图片示例代码,初不者可以根据代码扩充,呵呵
  • 本篇文章主要介绍了android递归压缩上传多张图片到七牛的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 提供大家参考,可以上传多张图片或mp4视频文件实例,比较全面

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,423
精华内容 40,569
关键字:

上传多张图片