java上传文件常见几种方式

1、ServletFileUpload

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

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

    

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;
    }

}

2、MultipartFile

   

@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 "上传失败";
    }

/**
     * 多文件具体上传时间,主要是使用了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 "上传成功";
    }

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;

时间: 2024-10-12 02:55:25

java上传文件常见几种方式的相关文章

SpringMVC上传文件的三种方式(转载)

直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartresolver.java.html 前台: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <%@ page language="java" contentTy

上传文件的三种方式

HTML Markup <div> <div> <h1>1. 用Web控件FileUpload,上传到网站根目录</h1> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="btnUpload" runat="server" Text="Upload" OnC

前端上传文件的几种方式

出于安全考量,操作系统分配给浏览器的权限较低,而单个网页所拥有对用户电脑操作的权限就更低了,这是为了防止因用户的操作不当导致恶意网页随意增删改动用户本地的文件,所以在前端网页中所有的文件操作必须全都由用户来主动操作触发文件上传. 用户触发文件上传操作的类型大致有以下几种常用方法 使用input标签,通过一个type设置为file的输入框可以选中本地文件 通过html5的拖拽方法进行文件上传 通过在编辑框进行文件复制 下面我们就对这几种不同的上传方法进行一个详细的分析,分析不同方法的一个特效和优劣

上传文件的三种方式xhr,ajax和iframe

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .upload { display: inline-block; background-color: #ef4300; cursor: pointer; width: 100px; height: 35

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

//上传文件实例 if (fileDealer.HasFile)//判断文件是否存在        {            string filepath = "";            try            {                string path = fileDealer.FileName;                string filename = path.Split('.')[0] + "_" + DateTime.Now

java读取XML文件的四种方式

java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>河南省郑州市</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>河南省郑州市二七区&

Simics虚拟机Solaris 8操作系统获取host 系统win7上的文件的两种方式

1 介绍 本文基于的环境设置如下: ? 宿主操作系统:Windows 7 Ultimate ? 寄生操作系统:Solaris 8 SPARC (SunOS 5.8) ? 虚拟环境:Simics 3.0.4 本文假定已在Simics 上安装好Solaris 8 SPARC 操作系统. 动机:一个Unix下可以运行的二进制文件GraphGen,在单独的一台装有Ubuntu的电脑上不能运行,因为该电脑的硬件架构是基于X86的,而GraphGen是SPARC架构下才能运行的程序:在我的笔记本Win7系统

SpringMVC上传文件的三种解析方式

springMVC上传文件后,在action解析file文件的三种方式. jsp页面的写法: <form action="parserUploadFile1" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit"

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

从早上下课到现在一直在琢磨如何给Gethub下载本地文件,中午饭都没吃.还好是解决了,感觉挺有成就感的.O(∩_∩)O哈哈~ 好哒 闲话不说,说重点. 一.git的安装 百度云:http://pan.baidu.com/s/1mhFy8Ik 打开后 点next 2.继续点next 3.继续点next 4.选第一行是默认windows使用 选第二行是Windows和Linux都可以 点next 5.可以不用管,选择默认就可以了 点next 6.安装成功后弹出 7 这时候你找到你的git文件夹,点击