Java中图片文件上传怎么实现,java图片上传服务器保存路径

  Java中图片文件上传怎么实现,java图片上传服务器保存路径

  本文实例为大家分享了爪哇服务器处理图片上传的具体代码,供大家参考,具体内容如下

  

一、简述

第一:浏览器上传图片实现;

 

  第二:微信小程序上传图片实现;

  

二、图片上传功能实现

1.处理H5的单文件上传实现:

 

  包cn。ncist。TMS。依恋。控制器;导入Java。io。文件;导入Java。io。文件输出流;导入Java。io。io异常;导入Java。util。hashmap导入Java。util。地图;导入javax。servlet。http。http servlet请求;导入javax。servlet。http。http servlet响应;导入org。spring框架。刻板印象。控制器;导入org。spring框架。网络。绑定。注释。请求映射;导入org。spring框架。网络。绑定。注释。请求方法;导入org。spring框架。网络。绑定。注释。请求参数;导入org。spring框架。网络。绑定。注释。响应正文;导入org。spring框架。网络。多部分。多部分文件;/*** 附件上传类* * @ author Fxh * */@请求映射(value=/file upload )@控制器公共类附件上传{/* * *上传文件功能,以邮政请求发送请求,* * @param request:请求对象* @param reponse:响应对象* @param file:上传的文件对象* @返回数据串: { 代码:S ,消息 : 服务调用成功} * @ throws io exception */@ request mapping(value=/do file upload ,method=RequestMethod .POST)@ response body public MapString,Object dofile upload(http servlet请求,HttpServletResponse响应,@ request param( file )多部分文件srcFile)抛出IOException{ /* *注意:传入参数时,文件的注解@ reqestparam( variable )--变量指:前端的h5的控件的名字值。* * 文件处理功能: 1.将获取的字节数组转化为文件对象,并保存在本地目录中;* * 文件处理思路: 1.将获取的(源)文件对象,通过函数获取字节数组;* 2.实例化文件对象和文件输出流;* 3.将字节数组写入文件即可。* * 功能难度: 简单。*///1.变量声明MapString,Object result=null//返回结果变量FileOutputStream fos=null//写入文件的变量文件destFile=null//写入的目的地文件(distination)try { result=new hashmap string,Object();//2.参数验证if(src file==null){抛出新的运行时异常(上传文件不存在);} if(srcFile.getBytes().length==0){抛出新的运行时异常(上传文件内容为空);}

      //3.操作文件对象,写入本地目录的文件中                        //3.1 截取文件后缀            String ext = srcFile.getOriginalFilename().substring(srcFile.getContentType().lastIndexOf( ".")+1);            //3.2 实例化目标文件,根据当前的操作系统,指定目录文件,            destFile = new File("D:"+File.separator+"descFolder"+File.separator+"descFile."+ext);            //3.3 实例化流            fos = new FileOutputStream(destFile);            //3.4 获取写入的字节数组,并写入文件                byte[] srcBytes = srcFile.getBytes();            fos.write(srcBytes);            fos.flush();            //4.对输入、输出流进行统一管理            //已在文件finally代码块处理                        result.put( "code", "S");            result.put( "msg", "服务调用成功");            result.put( "path", destFile.getAbsolutePath());            return result;        } catch (Exception e) {            // TODO: handle exception            e.printStackTrace();            result = new HashMap<String,Object>();            result.put( "code", "F");            result.put( "msg", "服务调用失败");            result.put( "path", null);            return result;        } finally{            //关闭系统资源,避免占用资源.            if(fos != null){                fos.close();            }        }    }}2.微信或手机APP上传图片文件的代码实现:

  

import java.io.BufferedInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; import javax.annotation.Resource;import javax.servlet.ServletInputStream;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.jboss.netty.handler.codec.http.HttpRequest;import org.springframework.mock.web.MockMultipartFile;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest; import com.hlinkcloud.ubp.core.constant.RedisKeyConstant;import com.hlinkcloud.ubp.core.service.RedisService;import com.hlinkcloud.ubp.core.util.BaseStringUtil;import com.hlinkcloud.ubp.facade.bean.common.FastDFSFile;import com.hlinkcloud.ubp.facade.bean.common.FileManagerConfig;import com.hlinkcloud.ubp.facade.service.common.FileInfoService;import com.hlinkcloud.ubp.facade.service.permission.UserService;import com.hlinkcloud.ubp.facade.util.DictionaryCommUtil; import fr.opensagres.xdocreport.core.io.internal.ByteArrayOutputStream; /** * 微信上传图片业务 *  * @author FengQi * */@Controller@RequestMapping("/wx_upload")public class WxUploadImgBusiness {     @Resource    private UserService userService;     @Resource    private RedisService redisService;     @Resource(name = "commonUtil")    private DictionaryCommUtil commUtil;     @Resource    private FileInfoService fileService; /* 文件服务 */        @RequestMapping("/getUploadFilePath")    @ResponseBody    public Map<String, Object> doWxUploadFile(HttpServletRequest request, HttpServletResponse response) {         HashMap<String, Object> map = new HashMap<String, Object>();                try {                        /*             * // 注释:该部分是使用在没有使用sprinvMVC的架构下的图片上传. // 1.磁盘文件条目工厂             * DiskFileItemFactory factory = new DiskFileItemFactory();             *              * //2.1 高速的文件上传处理类 ServletFileUpload sfu = new             * ServletFileUpload(factory);             *              * List<FileItem> list = sfu.parseRequest(request); FileItem picture             * = null; if(list != null && list.size() > 0){ for(FileItem item :             * list){ if(!item.isFormField()){ picture = item; } } }             */             // 1.将请求转化为操作流的请求对象.            MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;            MultipartFile picture = req.getFile("file");                        if(picture != null && picture.getBytes().length != 0){                // 2.将图片上传到服务器                byte[] bytes = picture.getBytes();                String ext = picture.getOriginalFilename().substring(                        picture.getOriginalFilename().lastIndexOf(".") + 1                        );                // (备注:下列代码为内部业务代码,可根据公司自身的需求,进行更改)                                                map.put("code", "S");                map.put( "msg", "服务调用成功");                map.put("statusCode", 200);                map.put("data", filePath);            }else{                throw new RuntimeException("上传图片异常或空图片!");            }        } catch (IOException e) {            e.printStackTrace();            map.put("code", "F");            map.put("msg", "服务调用失败");            map.put("statusCode", 500);            map.put("data", null);        }        return map;    }        /**     * 当不知道手机、微信传入前端的参数是什么时,     *      * 可调用该接口进行判断.     *      * @param request     * @param response     * @return     * @throws IOException     */    @RequestMapping(value = "/doUploadFileOfCI" , method = RequestMethod.POST )    public @ResponseBody Map<String,Object> doUploadFile(            HttpServletRequest request,//请求对象            HttpServletResponse response) throws IOException{//响应对象                System.out.println("doTestMultipartFile:");                MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;        //此时说明请求对象是MultipartHttpServletRequest对象        MultipartFile picture = req.getFile("UploadedImage");                //遍历请求得到所有的数据.        if(req != null){                        //获取所有属性名            Enumeration enume= req.getAttributeNames();            while(enume.hasMoreElements()){                System.out.println("enume:"+enume.nextElement());            }                        //获取所有文件名            Iterator<String> fileNames = req.getFileNames();            while(fileNames.hasNext()){                System.out.println("fileNames:"+fileNames.next());            }                        //获取操作文件的map            Map<String,MultipartFile> fileMap =  req.getFileMap();            if(fileMap != null && fileMap.size() > 0){                Set<String> set = fileMap.keySet();                for(String key:set){                    System.out.println("String:"+key);                }            }                        //获取请求流            InputStream is = req.getInputStream();            System.out.println("InputStream:"+is);            int length = -1;            while( (length = is.read()) != -1 ){                System.err.println("data:"+length);            }                        //获取所有请求参数            Enumeration enumee = req.getParameterNames();            while(enumee.hasMoreElements()){                System.out.println("enumee:"+enumee.nextElement());            }        }                System.out.println(picture);                        return null;    } }

总结:图片上传均是将图片的字节数据,以HTTP协议(其他编程语言自行定义传输协议) 进行数据的传输,当服务器接收到后,解析HTTP协议的图片数据并封装成Request请求对象,最后通过请求对象便可获取封装好的文件对象。(注:当项目配置SpringMVC的文件上传解析器后,可以在请求方法的参数中传入Multipart类型变量或解析Request对象。)

 

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: