前后端实现上传图片功能(JAVA代码)

1.前端大概

请求头必须为AJAX请求头: 'X-Requested-With': 'XMLHttpRequest'

一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式:
                                                  application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。
                                                  multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。

 

2.设置请求头格式

Vue.prototype.$sendFormData = axios.create({
  baseURL: baseUrl,
  timeout: 60000,
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'Content-Type': 'multipart/form-data'
  },
})

3.AJAX请求代码:

submitUpload() {
            // this.$refs.upload.submit();
             if(this.imageFileName.length>5){
                this.$message('图片不能超过5张');
                return false
           }
            let data  = {};  
            let files = this.imageFileName;  
            console.log(files)
            let param = new FormData(); //创建form对象  
            if(files!=''){  
                files.forEach((n,i)=>{
                    console.log(n)
                    n['isFormField']=true;
                    param.append('broadcastName',n.raw)
                    // param.append('isFormField',true)
                })
                param.append('strusercode',this.pubFuc.user.strusercode)
                ; //单个图片 ,多个用循环 append 添加   
                console.log(param)
            }else{  
                this.$message.error("图片不对");  
                return false
            }   
            this.$sendFormData.post('broadcast/uploadPicture',param)
            .then(data=>{
                if(data.data.result==1000){
                    this.imageFileName=[];
                }else{
                    this.$message({
                        type:"error",
                        message:data.data.msg
                    })
                }
            })
      },
 

4.JAVA后台代码(比较长:原因是一个方法,为方便大家看)

@GET
    @POST
    @Path("/uploadPicture")
    @Produces("application/json;charset=UTF-8")
    @Consumes("multipart/form-data")
    public String uploadPicture(@Context HttpServletRequest request, @Context HttpServletResponse response){
        JSONObject resultJson = new JSONObject();
        String imgName=null;//给图片定义名称
        String imgPath = null;//给图片指定的上传路径
        String strusercode=null;
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        try{
            //创建服务器路径存储图片
            imgPath=THESERVERURL+"broadcast\\";
            //创建文件夹
            File file = new File(imgPath);
            if (!file.exists()){// 创建文件夹
                file.mkdirs();
            }else{
                //删除文件中的所有图片
                String name[]=file.list();
                for (int i=0; i<name.length; i++){  
                    File f=new File(imgPath,name[i]);//此时就可得到文件夹中的文件  
                    f.delete();//删除文件  
                }  
            }
            DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置工厂
            factory.setRepository(new File(imgPath)); // 设置文件存储位置
            factory.setSizeThreshold(1024 * 1024); // 设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中,单位是byte
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setHeaderEncoding("utf-8"); // 这里就是中文文件名处理的代码,其实只有一行
            List<FileItem> listform = upload.parseRequest(request);
            if (listform != null && !listform.isEmpty()){
                int sort=0;
                for (FileItem fileItem : listform){
                    sort++;
                    Map<String,Object> map =new HashMap<String,Object>();
                    // 判断表单数据是否为普通字段 不是则为图片字段
                    if (fileItem.isFormField()){
                        String fieldName = fileItem.getFieldName();// 获取表单字段名称
                        String value = fileItem.getString("utf-8");// 获取表单字段值
                        strusercode=value;//获取用户编码
                    }else{
                        // 上传图片的保存
                        String value = fileItem.getName();//值
                        //String fieldName = fileItem.getFieldName();// 获取表单字段名称
                        if(value!=null && !"".equals(value)){
                            // 保存的图片名称  currentTimeMillis时间搓
                            imgName = System.currentTimeMillis()+ fileItem.getName().substring(fileItem.getName().lastIndexOf("."));
                            // 保存(写)
                            fileItem.write(new File(imgPath, imgName));
                            map.put("broadcastUrl", "broadcast/" + imgName);//图片路径
                            map.put("booleans", "1");//是否显示图片
                            map.put("sort", sort);//图片路径
                            map.put("dtnoticetime", PublicTools.gettime());//上传时间
                            list.add(map);
                        }
                    }
                }
                //删除表里面的图片记录
                userDaoImpl.delete("delete from t_broadcast");
                //往表里插入数据
                userDaoImpl.insertinto(BroadcastSql.insertSql(list, strusercode));
            }else{
                return this.returnError(resultJson,ResMessage.Server_Abnormal.code,request);
            }
        } catch (Exception e){
            logger.info("登录信息异常",e);
            return this.returnError(resultJson,ResMessage.Server_Abnormal.code,request);
        }
        return this.response(resultJson, request);
    }

JAVA 上传图片功能的更多相关文章

  1. JSP+java上传图片到服务器,并将地址保存至MYSQL + JSP网页显示服务器的图片

    这两天遇到个需求——用户头像修改功能. 查了好多资料,不是代码不全,就是某些高端框架,卡了好久,今已实现,分享给大家,如果有更好的方法,非常感谢可以在下方评论区写出 一.整体项目架构 二.web.xm ...

  2. 配置Django-TinyMCE组件支持上传图片功能

    Django自带的Admin后台,好用,TinyMCE作为富文本编辑器,也蛮好用的,这两者结合起来在做博客的时候很方便(当然博客可能更适合用Markdown来写),但是Django-TinyMCE这个 ...

  3. JAVA文件下载功能问题解决日志

    今天给报告系统做了个下载功能,遇到了挺多问题,通过查资料一一解决了. 1.首先遇到的问题是:java后台的输出流输出之后,没有任何报错,浏览器端不弹出保存文件的对话框,原本是ajax请求到后台的con ...

  4. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  5. Atitit.java eval功能的实现  Compiler API

    Atitit.java eval功能的实现  Compiler API 输出echo2 输出目录配置2 针对编译器,JDK 设计了两个接口,分别是 JavaCompiler 和JavaCompiler ...

  6. MVC ueditor的使用(实现上传图片功能)

    之前使用ckeditor不能实现上传图片功能,只要是我不知道怎么使用啦o( ̄ε ̄*),然后就换了ueditor~~,可以实现上传图片功能啦~\(≧▽≦)/~~ 下面是我的步骤:去官网下载最新版uedi ...

  7. aspx页面中用Input 标签实现上传图片功能

    实现上传图片功能需单独的建立一个aspx页面, 其中前台页面需要注意两点: a)实现上传功能的input的type="file" b)设置请求报文头为 enctype=" ...

  8. Android 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB

    Android虚拟机Dalvik Dalvik冲击 随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不过,其中的一个话题在J ...

  9. JNI的替代者—使用JNA访问Java外部功能接口

    摘自:http://www.cnblogs.com/lanxuezaipiao/p/3635556.html JNI的替代者-使用JNA访问Java外部功能接口 1. JNA简单介绍 先说JNI(Ja ...

随机推荐

  1. RabbitMQ发布订阅实战-实现延时重试队列

    RabbitMQ是一款使用Erlang开发的开源消息队列.本文假设读者对RabbitMQ是什么已经有了基本的了解,如果你还不知道它是什么以及可以用来做什么,建议先从官网的 RabbitMQ Tutor ...

  2. swing Jlable中存放变量显示问题

    java swing 学习 在做一个ATM机系统小案例中.碰到JLable中存放变量,变量发生改变.而JLable中还是显示原来的值,网上寻找答案,用updateUI()和revalidate();方 ...

  3. mysql配置文件夹错误:在安装mysql 5.6.19 时运行cmake命令是出现CMake Error: The source directory does not appear to contai

    在安装mysql 5.5.xx 时运行cmake命令是出现CMake Error: The source directory does not appear to contain CMakeLists ...

  4. 最长公共子序列 nlogn

    先来个板子 #include<bits/stdc++.h> using namespace std; , M = 1e6+, mod = 1e9+, inf = 1e9+; typedef ...

  5. xcode打包测试

    模拟器的内存cpu网络,都是电脑的.xcode可以查看. Xcode7之前是限制人,限制电脑,限制app,限制真机调试的. Xcode7之后,做真机测试只需要apple id即可,会自动生成证书. X ...

  6. docker overlay网络实现

    DOCKER的内置OVERLAY网络 内置跨主机的网络通信一直是Docker备受期待的功能,在1.9版本之前,社区中就已经有许多第三方的工具或方法尝试解决这个问题,例如Macvlan.Pipework ...

  7. VS中的路径宏

    说明$(RemoteMachine)设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置.$(References)以分号分隔的引用列表被添加到项 ...

  8. Hadoop MapReduce编程 API入门系列之分区和合并(十四)

    不多说,直接上代码. 代码 package zhouls.bigdata.myMapReduce.Star; import java.io.IOException; import org.apache ...

  9. .NET WebForm 简介(9.19)

    WebForm是微软开发的一款产品,它将用户的请求和响应都封装为控件.让开发者认为自己是在操作一个windows界面.极大地提高了开发效率. WinForm是C/S(客户端) 主要是本机执行 WebF ...

  10. 导入Excel时去除多余的空白行

    https://blog.csdn.net/shuishousuiyue/article/details/44773987 按着上面链接用的第一种方式,如下图所示:第二种方式要遍历每一个Excel单元 ...