Android 上传图片实例,java上传图片接口

1、完整上传图片代码方法:

private static final int TIME_OUT = 10*1000;   //超时时间
private static final String CHARSET = "utf-8"; //设置编码
    /*** android上传文件到服务器* @param file  需要上传的文件* @param RequestURL  请求的rul* @return  返回响应的内容*/public static String uploadFile(File file, String RequestURL){String result = null;String  BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成String PREFIX = "--" , LINE_END = "\r\n";String CONTENT_TYPE = "multipart/form-data";   //内容类型try {URL url = new URL(RequestURL);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestProperty("filename",file.getName());//添加头部参数,只有这个key 才可以得到对应的文件conn.setReadTimeout(TIME_OUT);conn.setConnectTimeout(TIME_OUT);conn.setDoInput(true);  //允许输入流conn.setDoOutput(true); //允许输出流conn.setUseCaches(false);  //不允许使用缓存conn.setRequestMethod("POST");  //请求方式conn.setRequestProperty("Charset", CHARSET);  //设置编码conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);conn.setRequestProperty("action", "upload");conn.connect();Log.e("lgq", "re==uploadFile=====" + file.getPath()+"......."+file.getName());if(file!=null){/*** 当文件不为空,把文件包装并且上传*/DataOutputStream dos = new DataOutputStream( conn.getOutputStream());StringBuffer sb = new StringBuffer();
//                sb.append(PREFIX);
//                sb.append(BOUNDARY);
//                sb.append(LINE_END);/*** 这里重点注意:* name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件* filename是文件的名字,包含后缀名的   比如:abc.png*///                sb.append("Content-Disposition: form-data; name=\"img\"; filename=\""+file.getName()+"\""+LINE_END);
//                sb.append("Content-Type: application/octet-stream; charset="+CHARSET+LINE_END);
//                sb.append(LINE_END);dos.write(sb.toString().getBytes());InputStream is = new FileInputStream(file);byte[] bytes = new byte[1024];int len = 0;while((len=is.read(bytes))!=-1){dos.write(bytes, 0, len);}is.close();dos.write(LINE_END.getBytes());byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();dos.write(end_data);dos.flush();/*** 获取响应码  200=成功* 当响应成功,获取响应的流*/int res = conn.getResponseCode();if(res==200){InputStream input =  conn.getInputStream();
//                    StringBuffer sb1= new StringBuffer();int ss ;byte[] buffer = new byte[1024];StringBuilder builder =new StringBuilder();while((ss=input.read(buffer))!=-1){
//                        sb1.append((char)ss);builder.append(new String(buffer, 0, ss, "UTF-8"));}result = builder.toString();System.out.println(result);}}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return result;}

2、异步请求方法

public class Upload extends AsyncTask<String,Void,String> {File file;public Upload(File file){this.file = file;}@Overrideprotected String doInBackground(String... strings) {return uploadFile(file,strings[0]);}@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);Log.i("lgq", "re==onPostExecute=====" + s);if(s.contains("succedd")){Toast.makeText(getBaseContext(),"上传成功",Toast.LENGTH_SHORT).show();}else{Toast.makeText(getBaseContext(),"上传失败",Toast.LENGTH_SHORT).show();}}
}

3、选中图片,开始上传图片

String firestrUrl = "http://192.168.0.110:8080/servletDemo/testa?method=lgqservice";
private File compressedImage1File;
new  Upload(compressedImage1File).execute(firestrUrl);

4、手机上传图片到java后台效果

手机选择图片

 java创建文件方法

 上传成功!!

 

demo链接:https://download.csdn.net/download/meixi_android/10976495

https://download.csdn.net/download/meixi_android/11006216

 

在线回复bug:QQ1085220040

 

附java  HttpServlet 上传图片主要方法完整代码实例:

    public void lgqservice(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        String filename = request.getHeader("filename");
        System.out.println("===service进来了====="+ filename);

    List<String> msgList2 = new ArrayList<String>();
        if (request.getContentLength() > 0) {
            InputStream inputStream = null;
            FileOutputStream outputStream = null;
            try {
                inputStream = request.getInputStream();
                // 给新文件拼上时间毫秒,防止重名
                long now = System.currentTimeMillis();
                File file = new File("d:/", "file-" + now + ".png");
                file.createNewFile();

                outputStream = new FileOutputStream(file);

                byte temp[] = new byte[1024];
                int size = -1;
                while ((size = inputStream.read(temp)) != -1) { // 每次读取1KB,直至读完
                    outputStream.write(temp, 0, size);
                }
                msgList2.add("succedd成功" );
                okreString = "上传成功";

            } catch (IOException e) {
                msgList2.add("defeated失败" );
                okreString = "上传失败";
            } finally {
                outputStream.close();
                inputStream.close();
            }
        }
           JSONObject result = new JSONObject();  
           result.put("success", true);  
           result.put("okstatus",okreString );
           System.out.println("FileLoadServlet=====8888==="+result);
        response.getWriter().print(result);
//        response.getWriter().print(formatJsonData("msg", msgList2));
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2、jeecg 笔记之 t:dictSelect 或 t:dgCol 自定义字典

1、需求 先说一下需求场景吧&#xff0c;我们知道 jeecg 中提供了下拉&#xff0c;其中包含两种使用场景&#xff1b; 一种是直接通过 t:dictSelect 使用&#xff0c;再就是 t:dgCol 用于表头的列表工具条标签&#xff1b; 总之就是这个样子 需求来了&#xff0c;我们想要下拉…

android动态切换logo和label

注&#xff1a;更新版本时。需换为默认的才可以更新apk android:enabled"true"为默认 1、准备资源 &#xff08;1&#xff09;logo和名称资源 <string name"app_name">httpheader</string> <string name"app_name1">第二名&…

3、jeecg 笔记之 模糊查询

1、前言 jeecg 考虑到默认模糊查询的话&#xff0c;会增加系统压力&#xff0c;导致查询慢&#xff0c;本来系统就挺那啥的... 2、方式一之实体赋值 实体重新赋值查询&#xff0c;用 * %% * 实现&#xff0c;我们知道 sql 中通常使用 % 去模糊查询的&#xff0c;jeecg 中 datag…

工作235:splice

const user res.data.user;const dept user.department;console.log(dept.property)const properties dept.property.split(",");console.log(properties) 运行结果

java打印三角形,菱形。任意边长大小

一、等腰三角形 for (int j 0; j < num; j) { if (j > 0) { for (int i 0; i < j; i) { if (i j - 1) { for (int k 0; k < num - j; k) { if (k num - j - 1) { Syst…

工作236:点击直接进入

<div class"container"><!-- <el-radio-group v-model"mode">--><div><!-- <el-radio-button class"login-btn" label"0">营销端</el-radio-button>--><el-button class"login-b…

java spring框架使用实例demo

首先导入spring的jar包 1、创建web项目&#xff0c;创建spring.xml文件 注&#xff1a;base-package即是包名 spring.xml详情&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!-- 查找最新的schemaLocation 访问 http://www.springfram…

2、Flutter 填坑记录篇

1、前言 之前写了一篇文章关于 flutter 初体验的一篇&#xff0c;https://www.cnblogs.com/niceyoo/p/9240359.html&#xff0c;当时一顿骚操作&#xff0c;然后程序就跑起来了。 隔了好一段时间&#xff0c;换了个电脑&#xff0c;重新装了个AndroidStudio&#xff0c;继续搭建…

工作238:Vue.js中this.$nextTick()的使用

this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它&#xff0c;然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样&#xff0c;不同的是回调的 this 自动绑定到调用它的实例上。 假设我们更改了某个dom元素内部的文本&#xff0c;而这时候我…

拉勾网大数据相关岗位数据爬虫分析

拉勾网大数据相关招聘数据分析 观察对象&#xff1a;大数据相关岗位的招聘数据 观察时间&#xff1a;2016.3.28 数据来源&#xff1a;拉勾网 1、分析目的 眼下&#xff0c;大数据是一个非常热门的话题。受到非常多人的关注和追捧。其创造的相关职业也受到大家的青睐。但大数据相…

2018--20179215--《文献管理与信息分析》第三讲 英文数据库资源的发展趋势和利用...

《文献管理与信息分析》第三讲 英文数据库资源的发展趋势和利用 一、科研相关的文献资源有以下十大来源&#xff1a; 专利、会议论文、期刊、学位论文、科技报告、科技档案、产品资料、政府出版物、标准文献、图书。 二、数据库的使用 1.不同搜索引擎的差异&#xff1a; 覆盖的…

工作239:内容过长省略号失败 直接改的样式表

给元素加入以下样式&#xff1a; white-space:nowrap;overflow:hidden; text-overflow:ellipsis; 此外&#xff0c;还要注意给元素加上宽度&#xff1a; width:100px;

Android身份证识别demo,文字识别

百度云链接&#xff1a;https://console.bce.baidu.com/?fromai1#/aip/overview 1、1首先去百度文字识别创建应用&#xff0c;获取ak和sk 配置ak和sk 1、2 jniLibs文件夹复制过去 2、识别身份证信息方法&#xff1a; /**** 解析身份证图片** param idCardSide 身份证正反面*…

jq消除网页滚动条

网页有些时候需要能滚动的效果&#xff0c;但是不想要滚动条&#xff0c;我就遇到了这样的需求。自己用jq写了一个垂直滚动条。 纯css也可以实现 .box::-webkit-scrollbar{display:none} 但是edge和Firefox不兼容&#xff0c;自己想了一下只要监听滚轮事件&#xff0c;用jq写应…

5、Flutter 实现 ViewPager、bottomNavigationBar 界面切换

1、前言 首先我们想一下&#xff0c;如果在 Android 中实现 布局切换&#xff0c;通常的思路是&#xff1a; 做一个 viewpager一组 Fragment每个 Fragment 绑定一个 xml最后填充至 viewpager2、Flutter 实现 上边提到的用安卓原生做&#xff0c;思路是很明确&#xff0c;但是代…

Android 应用内实现导航页面,接入百度SDK内置导航,高德SDK内置导航

1、首先到百度地图开放平台创建应用&#xff0c;获取应用AK http://lbsyun.baidu.com/apiconsole/key 2、到百度语言平台创建应用&#xff0c;获取Secret Key和语言APP ID http://yuyin.baidu.com/app 3、到百度地图开放平台下载Android 导航SDK https://pan.baidu.com/s/1z…

6、Flutter Error waiting for a debug connection: ProcessException: adb did not report f(转)

1、错误信息 Error waiting for a debug connection: ProcessException: adb did not report forwarded port 2、解决方法 升级adb&#xff0c;其实是更新SDK Platform-Tools就可以了。 步骤&#xff1a;打开 Android SDK >>> SDK Tools 勾选 Android SDK Flatform-…

前端学习(2710):重读vue电商网站30之左侧菜单栏图标设计

我们想要的效果如下&#xff1a; 如何设计&#xff1f; 首先&#xff0c;我们可以在 data 中定义一个对象&#xff0c;对应于每一个菜单选项的 id 然后通过 for 循环遍历每一个菜单选项的 id即可。

Android运行时异常 couldn't find xx.so

Android 关于导入module&#xff0c;运行时错误 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.txjifei.mapclient.liteapp-fp0FTs4C57uV3aLogQRvYA/base.apk"],nativeLibraryDirectories[/data/app/com.txj…