servlet接收客户端传过来的图片(okhttp上传)

 Android端

//region 上传图片
    public static void uploadImg(String name,String imagePath,String imgFileName, String type,Callback callback){
        OkHttpClient okHttpClient;
        File file = new File( imagePath );
        RequestBody image = RequestBody.create( MediaType.parse( "image/*" ), file );
        RequestBody requestBody = new MultipartBody.Builder()
                .setType( MultipartBody.FORM )
                .addFormDataPart("file", imgFileName, image )
//                .addFormDataPart("pattern",type)
                .build();
        okhttp3.Request request = new okhttp3.Request.Builder()
                .url( url +name)
                .post( requestBody )
                .build();
        okhttp3.OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
        okHttpClient = httpBuilder.build();
        okHttpClient.newCall( request ).enqueue( callback );
    }
    //endregion

Servlet服务端

public void uploadFilesSpecifyPath(HttpServletRequest request, HttpServletResponse response) {
		//获得磁盘文件条目工厂。  
        DiskFileItemFactory factory = new DiskFileItemFactory();  
        //获取文件上传需要保存的路径,upload文件夹需存在。  
//        String path = request.getSession().getServletContext().getRealPath("/upload");  
        String path = "F:\\test";  
        
        //设置暂时存放文件的存储室,这个存储室可以和最终存储文件的文件夹不同。因为当文件很大的话会占用过多内存所以设置存储室。  
        factory.setRepository(new File(path));  
        //设置缓存的大小,当上传文件的容量超过缓存时,就放到暂时存储室。  
        factory.setSizeThreshold(1024*1024);  
        //上传处理工具类(高水平API上传处理?)  
        ServletFileUpload upload = new ServletFileUpload(factory);  
        
          
        try{  
            //调用 parseRequest(request)方法  获得上传文件 FileItem 的集合list 可实现多文件上传。  
            Map<String, List<FileItem>> lists = upload.parseParameterMap(request);
//            file=[name=head.jpg, StoreLocation=null, size=3366 bytes, isFormField=false, FieldName=file]实例数据
//            Util.log(TAG,lists);
            List<FileItem> list = lists.get("file");
            for(FileItem item:list){  
                //获取表单属性名字。  
                String name = item.getFieldName();  
                //如果获取的表单信息是普通的文本信息。即通过页面表单形式传递来的字符串。  
                if(item.isFormField()){  
                    //获取用户具体输入的字符串,  
                    String value = item.getString();  
                    Util.log(TAG,value);
                    request.setAttribute(name, value);  
                }  
                //如果传入的是非简单字符串,而是图片,音频,视频等二进制文件。  
                else{   
                    //获取路径名  
                    String value = item.getName();  
                    //取到最后一个反斜杠。  
                    int start = value.lastIndexOf("\\");  
                    //截取上传文件的 字符串名字。+1是去掉反斜杠。  
                    String filename = value.substring(start+1);  
                    request.setAttribute(name, filename);  
                      
                    /*直接写到文件中。 */
                    item.write(new File(path,filename));  
                }  
            }  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
		
	}

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值