java上传文件的几种方式_javaweb文件上传

java上传文件的几种方式_javaweb文件上传1、ServletFileUpload  表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象  ,在由相应的servlet进行处理。packagecom.jws.app.operater.service.impl;…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1、ServletFileUpload

  表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象

  ,在由相应的servlet进行处理。

    

java上传文件的几种方式_javaweb文件上传
java上传文件的几种方式_javaweb文件上传

package com.jws.app.operater.service.impl;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import net.sf.json.JSONObject;

import com.jws.app.operater.data.UserInfoMapper;
import com.jws.app.operater.model.UserInfo;
import com.jws.app.operater.service.PersionPhoteAuthServer;
import com.jws.common.constant.Constants;
import com.jws.common.constant.ConstantsCode;
import com.jws.common.util.JiveGlobe;
import com.jws.common.util.ResultPackaging;

@Service("persionPhoteAuthServerImpl")
public class PersionPhoteAuthServerImpl implements PersionPhoteAuthServer {
    @Resource
    private UserInfoMapper userInfoMapper;
    private final Logger logger = Logger.getLogger(this.getClass());

    @Override
    public JSONObject uploadPhoto(HttpServletRequest reques) {
        JSONObject returnObject = new JSONObject();
        String path =  Constants.imageUrl;
        File repositoryFile = new File(path);
        if (!repositoryFile.exists()) {repositoryFile.mkdirs();}
        FileItemFactory factory = new DiskFileItemFactory(1024 * 32,repositoryFile);
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setHeaderEncoding("utf-8");
        upload.setSizeMax(1024 * 1024 * 500);
        List<?> fileItr = null;
        try {
             fileItr = upload.parseRequest(reques);
                // 讲非文件值放在map中
                HashMap<String, String> map = new HashMap<>();
                Iterator<?> iter = fileItr.iterator();
                while (iter.hasNext()) {
                    FileItem item = (FileItem) iter.next();
                    if (item.isFormField()) {
                        map.put(item.getFieldName(), item.getString());
                    }
                }
                // 验证参数
                if (map == null || !map.containsKey("openid")) {
                    returnObject =ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_FAIL, ConstantsCode.CODE_LACK_PARAMETER, null);
                    return returnObject;            
                }
                String openid  = map.get("openid");
                //处理文件
                boolean isTrue = true;
                String filename = "";
                Iterator<?> iter1 = fileItr.iterator();
                while (iter1.hasNext()) {
                    FileItem f = (FileItem) iter1.next();
                    if (!f.isFormField()) {
                //详情 name=abc.png,  size=376507 bytes,     isFormField=false, FieldName=picture1
                        filename = f.getName() == null ? "" : f.getName();
                        filename = JiveGlobe.getFromRom()+".jpg";
                        File saveFile = new File(path, filename);
                        if (saveFile.exists()) {
                            isTrue = false;break;}
                            f.write(saveFile);
                        } 
            }
            if(JiveGlobe.isEmpty(filename)){
                returnObject =ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_FAIL, ConstantsCode.CODE_LACK_PARAMETER, null);
                return returnObject;            
            }
            returnObject =ResultPackaging.dealJsonObject(ConstantsCode.RESULT_CODE_SUCCESS, ConstantsCode.RESULT_CODE_SUCCESS, null);
            //保存文件信息
            UserInfo rd = new UserInfo();
            rd.setSpareField1("1");
            rd.setSpareField3(filename);
            rd.setOpenId(openid);
            userInfoMapper.updateByPrimaryKey(rd);
        } catch (Exception e) {
            System.out.println(e);
            logger.error("###认证失败"+e);
        }
        return returnObject;
    }
    
    
}

View Code

 

2、MultipartFile

   

java上传文件的几种方式_javaweb文件上传
java上传文件的几种方式_javaweb文件上传

@RequestMapping("/upload")
    @ResponseBody
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {

        if (file.isEmpty()) {
            return "文件为空";
        }
        // 获取文件名
        String fileName = file.getOriginalFilename();
        System.out.println("上传的文件名为:" + fileName);
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        System.out.println("上传的后缀名为:" + suffixName);
        // 文件上传后的路径
        String filePath = "D://";
        File dest = new File(filePath + fileName);
        // 检测是否存在目录
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            file.transferTo(dest);
            return "上传成功";
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败";
    }

View Code

java上传文件的几种方式_javaweb文件上传
java上传文件的几种方式_javaweb文件上传

/**
     * 多文件具体上传时间,主要是使用了MultipartHttpServletRequest和MultipartFile
     * 
     * @param request
     * @return
     */
    @RequestMapping(value = "/batch/upload", method = RequestMethod.POST)
    public @ResponseBody String handleFileUpload1(HttpServletRequest request) {
        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
        String filePath = "D://";
        MultipartFile file = null;

        for (int i = 0; i < files.size(); ++i) {
            file = files.get(i);
            // 获取文件名
            String fileName = file.getOriginalFilename();
            System.out.println("上传的文件名为:" + fileName);

            if (!file.isEmpty()) {
                File dest = new File(filePath + fileName);
                // 检测是否存在目录
                if (!dest.getParentFile().exists()) {
                    dest.getParentFile().mkdirs();
                }
                try {
                    file.transferTo(dest);
                } catch (Exception e) {
                    return "上传失败 " + i + " => " + e.getMessage();
                }
            } else {
                return "上传失败 " + i + " 文件为空.";
            }
        }
        return "上传成功";
    }

View Code

 

3、CommonsMultipartResolver

  

 *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(“/uploadFile”)
    public Map<String, Object> uploadFile(HttpServletRequest request) {

        Map<String, Object> map = new HashMap<String, Object>();
        // 将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        // 检查form中是否有enctype=”multipart/form-data”
        if (multipartResolver.isMultipart(request)) {

            // 将request变成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            // 获取multiRequest 中所有的文件名
            Iterator iter = multiRequest.getFileNames();
            while (iter.hasNext()) {

                // 一次遍历所有文件
                MultipartFile file = multiRequest.getFile(iter.next().toString());
                try {

                    if (file != null && StringUtils.isNotBlank(file.getOriginalFilename().trim())) {

                        Map<String, String> metas = new HashMap<String, String>();
                        // 取得文件后缀
                        String filename = file.getOriginalFilename();
                        String newFileName = System.currentTimeMillis() + (int) (Math.random() * 100)
                                + filename.substring(filename.lastIndexOf(“.”));
                        metas.put(StorageConstants.META_KEY_FILENAME, newFileName);
                        String imgUrl = storageService.store(file.getBytes(), metas);
                        map.put(“imgUrl”, imgUrl);
                        map.put(“retCode”, “success”);
                        // map.put(“imgUrl”,
                        // “https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=611483611,2895064642&fm=117&gp=0.jpg”);
                    }
                } catch (Exception e) {

                    e.printStackTrace();
                }
            }
        } else {

            map.put(“retCode”, “error”);
        }
        return map;

 

转载于:https://www.cnblogs.com/kimobolo/p/7109999.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197140.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland 2021激活码_最新在线免费激活[通俗易懂]

    (goland 2021激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月26日
    68
  • Linux系统开启IPv6任播(anycast)地址[通俗易懂]

    Linux系统开启IPv6任播(anycast)地址[通俗易懂]这两年真是在linux上各种掏捡,各种零碎。。。无力吐槽了。。。下面简单记录一下开启任播地址我的系统是Debian7.21、开启IPv6转发sudoecho1>/proc/sys/net/ipv6/conf/all/forwarding2、完了系统会自动生成IPv6任播地址cat/proc/net/anycast6此时你在网卡上新配置一个IPv6地址,就会在/proc/net/anycast6下生成一个对应的任播地址。在另一台主机上你可以ping6一下其中一个任.

    2022年5月23日
    53
  • 三行代码递归实现二叉树层序遍历

    三行代码递归实现二叉树层序遍历简述二叉树的层序遍历网上大部分都是使用队列的出队和入队来实现的,这次我用三行代码递归实现二叉树的层序遍历.层序下图是一个简单的二叉树,层序就是一行一行的往下读取,这个二叉树的层序结果便是:1234567(图画的比较丑,强迫症看着难受,看官忍一下)递归分析要想使用递归,必须有两个条件:函数参数类型相同递归必须有出口在二叉树中找到上面的两个条件,与

    2022年5月21日
    28
  • datagrip 2021 mac 激活码(在线激活)

    datagrip 2021 mac 激活码(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    119
  • archwing任务流程_机器的武器任务流程

    archwing任务流程_机器的武器任务流程有两台机器 A,B 以及 K 个任务。机器 A 有 N 种不同的模式(模式 0∼N−1),机器 B 有 M 种不同的模式(模式 0∼M−1)。两台机器最开始都处于模式 0。每个任务既可以在 A 上执行,也可以在 B 上执行。对于每个任务 i,给定两个整数 a[i] 和 b[i],表示如果该任务在 A 上执行,需要设置模式为 a[i],如果在 B 上执行,需要模式为 b[i]。任务可以以任意顺序被执行,但每台机器转换一次模式就要重启一次。求怎样分配任务并合理安排顺序,能使机器重启次数最少。输入格

    2022年8月10日
    18
  • 《Python源码剖析》学习笔记

    《Python源码剖析》学习笔记最近阅读《Python源码剖析》一书,对python底层实现有了更为深刻的理解,特在此记录学习笔记。共有六篇笔记,原文发表在PythonTip。Python源码剖析笔记—第一章:Python对象初探Python源码剖析笔记—-第二章:初识PyIntObjectpython源码剖析笔记—PyListObjectpython源码剖析笔记—Dic

    2022年8月23日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号