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,一经查实,立即删除!

相关文章

数据库日期时间显示在页面上格式错误的解决方案

做项目过程中肯定会碰到这样一个问题&#xff1a;在数据库中存的是date或datetime类型的值&#xff0c;从数据库里取出来遍历到页面上显示的是long类型或是GTM类型的日期时间。对于这个问题&#xff0c;经过研究之后有以下结论&#xff1a; 1.hibernate不会出现这样的问题&…

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

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

工作234:按钮禁用

<!--定义一个有按钮的对话框 相当于dialog和按钮组合使用--> <template><!-- 有按钮的对话框 这个位置的代码会被包裹过去--><!--close-on-click-modal 是否可以通过点击 modal 关闭 Dialog append-to-body控制不能出现遮挡层--><el-dialog:title&q…

android动态切换logo和label

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

洛谷 P4016 负载平衡问题 【最小费用最大流】

求出平均数sum&#xff0c;对于大于sum的点连接(s,i,a[i]-sum,0)&#xff0c;表示这个点可以流出多余的部分&#xff0c;对于小于sum的点连接(i,t,sum-a[i],0)表示这个点可以接受少的部分&#xff0c;然后每个点向相邻的两个点连(i,j,inf,1)表示可以任意转移&#xff0c;每转移…

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…

django-form and fields validation

参考资料 清除数据与表单验证 清除数据时会进行表单验证。 在表格处理时有三种clean方法可调用&#xff0c;通常是在对表单调用is_valid()时执行。clean响应&#xff1a;一般有两种结果&#xff0c;如果处理的数据有问题&#xff0c;则抛出ValidationError错误信息&#xff1b;…

1、vue 笔记之 组件

1、组件个人理解&#xff1a; <组件>是页面的一部分&#xff0c;将界面切分成部分&#xff0c;每部分称为 <组件>2、组件化思想&#xff1a; //2.1、定义一个全局的组件&#xff0c;组件支持‘驼峰命名’规则Vue.component("TodoItem",{props: [content]…

工作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…

语料库

http://blog.sina.com.cn/s/blog_66dfbcca0100r3ex.html转载于:https://www.cnblogs.com/lhuser/p/8445287.html

工作237:vuex取值

1获取vuex的取值 /*通过vuex的状态去判断现在所处的业务端还是营销端*/computed:{/*取出对应的业务端和营销端的内容*/Mode(){return this.$store.state.mode}}, 2直接赋值 task_business_module(){getAction(/task/task_business_module).then(res > {this.menus res.da…

2、Flutter 填坑记录篇

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

为何setRequestMethod(GET)不生效

在上传文件时&#xff0c;想使用setRequestMethod&#xff08;“GET”&#xff09;。结果无效 因为需要使用输出流上传文件&#xff0c;而使用输出流时&#xff0c;HttpURLConnection默认使用post请求。是无法更改的 conn.setDoOutput(true); //允许输出流 与 conn.setR…

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

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

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

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

3、Finished with error: FormatException: Bad UTF-8 encoding 0xc3 (at offset 169)

这是由于 app 的版本为 release 找不到 keystore 文件&#xff0c; 我们只需要在 app 下的 build.gradle 文件中修改为 signingConfigs.debug 即可&#xff1a; buildTypes {release {signingConfig signingConfigs.debugproguardFiles getDefaultProguardFile(proguard-androi…

plsql 弹出 register,plsql注册码

注册码&#xff1a; Product Code&#xff1a;4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number&#xff1a;601769 password&#xff1a;xs374ca https://blog.csdn.net/ma141982/article/details/76154919/