andrid 上传图片 asp.net 后台接收并保存
android 端代码
package com.example.uploadfile; import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map; public class PostFile {
static String BOUNDARY = java.util.UUID.randomUUID().toString();
static String PREFIX = "--";
static String LINEND = "\r\n";
static String MULTIPART_FROM_DATA = "multipart/form-data";
static String CHARSET = "UTF-8";
static String result =null;
static int SO_TIMEOUT=5*1000; //上传代码,第一个参数,为要使用的URL,第二个参数,为表单内容,第三个参数为要上传的文件,可以上传多个文件,这根据需要页定
public static String post(String actionUrl, Map<String, String> params,
Map<String, File> files) throws IOException {
try{
URL url =new URL(actionUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(SO_TIMEOUT);
conn.setConnectTimeout(SO_TIMEOUT);
conn.setDoInput(true);// 允许输入流
conn.setDoOutput(true);// 允许输出流
conn.setUseCaches(false);// 不允许使用缓存
conn.setRequestMethod("POST");// 请求方式
conn.setRequestProperty("Charset",CHARSET);// 设置编码
conn.setRequestProperty("connection","keep-alive");
conn.setRequestProperty("Charsert", CHARSET);
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA +";boundary="+ BOUNDARY);
/**
* 当文件不为空,把文件包装并且上传
*/
DataOutputStream dos =new DataOutputStream(
conn.getOutputStream());
StringBuffer sb =new StringBuffer();
for(Map.Entry<String, String> entry : params.entrySet()) {
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() +"\""+ LINEND);
sb.append("Content-Type: application/octet-stream; charset="+CHARSET+ LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
}
if(files!=null){
for (Map.Entry<String, File> file : files.entrySet()) {
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
/**
* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
* filename是文件的名字,包含后缀名的 比如:abc.png
*/
sb.append("Content-Disposition: form-data; name=\""+file.getKey()+"\"; filename=\""+ file.getValue() +"\""+ LINEND);
sb.append("Content-Type: application/octet-stream; charset="+CHARSET+ LINEND);
sb.append(LINEND); dos.write(sb.toString().getBytes());
InputStream is =new FileInputStream(file.getValue());
byte[] bytes =new byte[1024];
int len = 0;
while((len = is.read(bytes)) != -1) {
dos.write(bytes, 0, len);
}
is.close();
dos.write(LINEND.getBytes());
}
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
dos.write(end_data);
dos.flush();
/**
* 获取响应码 200=成功 当响应成功,获取响应的流
*/
int res= conn.getResponseCode(); InputStream input = conn.getInputStream();
StringBuffer sb1 =new StringBuffer();
int ss;
while((ss = input.read()) != -1) {
sb1.append((char) ss);
}
result = sb1.toString();
}
}catch(MalformedURLException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
return result;
} /**
* 上传单张图片加参数
*@paramfile 文件
*@paramfileName 服务器接口图片参数名称
*@paramRequestURL 上传URL
*@paramparams 参数
*@return
*/
public static String PostData(File file,String fileName, String RequestURL,Map<String, String> params) { try{
URL url =new URL(RequestURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(SO_TIMEOUT);
conn.setConnectTimeout(SO_TIMEOUT);
conn.setDoInput(true);// 允许输入流
conn.setDoOutput(true);// 允许输出流
conn.setUseCaches(false);// 不允许使用缓存
conn.setRequestMethod("POST");// 请求方式
conn.setRequestProperty("Charset",CHARSET);// 设置编码
conn.setRequestProperty("connection","keep-alive");
conn.setRequestProperty("Charsert", CHARSET);
conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA +";boundary="+ BOUNDARY); if(file !=null) {
/**
* 当文件不为空,把文件包装并且上传
*/
DataOutputStream dos =new DataOutputStream(
conn.getOutputStream());
StringBuffer sb =new StringBuffer(); for(Map.Entry<String, String> entry : params.entrySet()) {
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\""+ entry.getKey() +"\""+ LINEND);
sb.append("Content-Type: application/octet-stream; charset="+CHARSET+ LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
} sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
/**
* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
* filename是文件的名字,包含后缀名的 比如:abc.png
*/
sb.append("Content-Disposition: form-data; name=\""+fileName+"\"; filename=\""+ file.getName() +"\""+ LINEND);
sb.append("Content-Type: application/octet-stream; charset="+CHARSET+ LINEND);
sb.append(LINEND); 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(LINEND.getBytes());
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND)
.getBytes();
dos.write(end_data);
dos.flush();
/**
* 获取响应码 200=成功 当响应成功,获取响应的流
*/
int res= conn.getResponseCode(); InputStream input = conn.getInputStream();
StringBuffer sb1 =new StringBuffer();
int ss;
while((ss = input.read()) != -1) {
sb1.append((char) ss);
}
result = sb1.toString();
}
}catch(MalformedURLException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
return result;
}
}
package com.example.uploadfile; import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map; import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button; public class MainActivity extends Activity {
Button btn_upload,btn_upload1,btn_upload2,btn_upload3;
Map<String, File> files;
Map<String, String> params;
String result="";
private ProgressDialog pd;
private String httpUrl="http://192.168.1.136/api.ashx";
private String httpUrl1="http://192.168.1.136/upFiles.ashx";
String path=Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/IMG_20160103_122157.jpg";
//String path=Environment.getExternalStorageDirectory().getPath()+"/DCIM/P60131-103130.JPG"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_upload=(Button)this.findViewById(R.id.btn_upload);
btn_upload1=(Button)this.findViewById(R.id.btn_upload1);
btn_upload2=(Button)this.findViewById(R.id.btn_upload2);
btn_upload3=(Button)this.findViewById(R.id.btn_upload3); btn_upload.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
pd = new ProgressDialog(MainActivity.this);
pd.setMessage("正在上传...");
pd.show();
params=new HashMap<String, String>();
params.put("pictureName","aaaa.jpg");
files=new HashMap<String, File>();
files.put("picturePath", new File(path));
new Thread(new Runnable() {
@Override
public void run() {
try {
result=PostFile.post(httpUrl, params, files);
} catch (IOException e) {
e.printStackTrace();
}
Message msg=handler.obtainMessage();
msg.what=1;
handler.sendMessage(msg);
}
}).start();
}
}); btn_upload1.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
pd = new ProgressDialog(MainActivity.this);
pd.setMessage("正在上传...");
pd.show();
params=new HashMap<String, String>();
params.put("pictureName","aaaa.jpg");
files=new HashMap<String, File>();
files.put("picturePath", new File(path));
new Thread(new Runnable() {
@Override
public void run() {
result=PostFile.PostData(new File(path), "picturePath", httpUrl, params);
Message msg=handler.obtainMessage();
msg.what=1;
handler.sendMessage(msg);
}
}).start();
}
}); btn_upload2.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
pd = new ProgressDialog(MainActivity.this);
pd.setMessage("正在上传...");
pd.show();
Bitmap bitmap=ImageUtils.imageToBitmap(path);
String imageBase64=ImageUtils.convertIconToString(bitmap);
params=new HashMap<String, String>();
params.put("picturePath",imageBase64);
files=new HashMap<String, File>();
new Thread(new Runnable() { @Override
public void run() {
try {
result=PostFile.post(httpUrl1, params,files);
} catch (IOException e) {
e.printStackTrace();
}
Message msg=handler.obtainMessage();
msg.what=1;
handler.sendMessage(msg);
}
}).start();
}
}); btn_upload3.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { }
}); } private Handler handler=new Handler(){ @Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
pd.dismiss();
Log.e("result", result);
} };
}
package com.example.uploadfile; import java.io.ByteArrayOutputStream; import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.util.Base64; /**
* 类 名:ImageUtils
* 作 者:Free宇
* 主要功能:
* 创建日期 :2016-2-2 下午1:33:19
* 参 数:
* 修 改 者:
* 修改日期:
* 修改内容:
*/
public class ImageUtils {
/***
* 动态设置inSampleSize 倍数
*
* @param pathName
* 图片路径
* @param reqWidth
* 要压缩的宽度
* @param reqHeight
* 要压缩的高度
* @return
*/
public static Bitmap imageToBitmap(String pathName) {
// 首先设置 inJustDecodeBounds=true 来获取图片尺寸
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(pathName, options);
// 计算 inSampleSize 的值
options.inSampleSize =100; // 根据计算出的 inSampleSize 来解码图片生成Bitmap
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(pathName, options);
} /**
* 图片转成string
*
* @param bitmap
* @return
*/
public static String convertIconToString(Bitmap bitmap)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();// outputstream
bitmap.compress(CompressFormat.PNG, 100, baos);
byte[] appicon = baos.toByteArray();// 转为byte数组
return Base64.encodeToString(appicon, Base64.DEFAULT); }
}
asp.net 服务 端代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace uploadFiles
{
/// <summary>
/// api 的摘要说明
/// </summary>
public class api : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
HttpPostedFile file = context.Request.Files["picturePath"];
//可以用传入参数命名
//String pictureName = context.Request.Form["pictureName"];
if (file == null) {
context.Response.Write(getGson(, "" + context.Request.Files.Count));
return;
}
if (String.IsNullOrEmpty(file.FileName))
{
context.Response.Write(getGson(, "" + context.Request.Files.Count));
return;
}
String imagePath = "/upload/" + DateTime.Now.ToString("yyyyMMdd") + "/";
string physicsPath = HttpContext.Current.Server.MapPath("~" + imagePath);
if (!System.IO.Directory.Exists(physicsPath))
{
System.IO.Directory.CreateDirectory(physicsPath);
} //生成新文件名
int index = file.FileName.LastIndexOf(".");
string fileExt = file.FileName.Substring(index);
string datestring = DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Millisecond.ToString();
string pictureName = datestring + fileExt;
file.SaveAs(physicsPath + pictureName);
context.Response.Write(getGson(, "" + file.FileName)); } private String getGson(int status,String msg)
{
String json = "{\"status\": " + status + ",\"msg\": \"" + msg + "\",\"info\":{\"id\":1}}";
return json;
} public bool IsReusable
{
get
{
return false;
}
} }
}
andrid 上传图片 asp.net 后台接收并保存的更多相关文章
- ajax 发送json 后台接收 遍历保存进数据库
前台怎么拿参数的我就不管了我也不会 反正用这个ajax没错 ajax 代码 一定要写明http请求类型 { contentType:"application/x-www-form-ur ...
- 前台页面上传data image图片,java后台接收图片保存
最近在项目中有这么一个需求,就是上传一个视频文件,然后要获取视频文件的第一帧图片,这个可以通过canvas获取得到,得到的是一个dataURL,之后还要将这个图片上传到云,这个时候如何操作就不清楚了, ...
- 手机端上传图片及java后台接收和ajaxForm提交
有很多微信开发的项目在手机端需要传图片,但是又不想调用微信的上传图片接口,于是采取了如下做法: 使用ajaxForm提交文件所需js:jquery.form.js 页面代码: <%@ page ...
- base64编码上传图片java后台接收实例
原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- 每日学习心得:CustomValidator验证控件验证用户输入的字符长度、Linq 多字段分组统计、ASP.NET后台弹出confirm对话框,然后点击确定,执行一段代码
2013-9-15 1. CustomValidator验证控件验证用户输入的字符长度 在实际的开发中通常会遇到验证用户输入的字符长度的问题,通常的情况下,可以写一个js的脚本或者函数,在ASP ...
- 表单数据验证方法(二)——ASP.NET后台验证
昨天写了一下关于如何在前台快捷实现表单数据验证的方法,今天接着昨天的,把后台实现数据验证的方法记录一下.先说明一下哈,我用的是asp.net,所以后台验证方法也是基于.net mvc来做的. 好了,闲 ...
- ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要
ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...
- CKEditor+SWFUpload实现功能较为强大的编辑器(三)---后台接收图片流程
在前台配置完CKEditor和SWFUpload之后就可以满足基本的需求了 在这里,我配置的接收异步上传的图片的页面为upload.ashx 在这个ashx中对上传的图片处理的流程如下: contex ...
随机推荐
- 在Java中,以下关于方法重载和方法重写描述正确的是?
public class TTTTT extends SuperC{ public String get(){ return null; } } class SuperC{ Object get(){ ...
- 每天进步一点点- 资源与URI(吐血精华总结)
1.资源(Resources) 每一个URI代表一种资源这句话的理解 ***************************************************************** ...
- linux二进制/十六进制日志文件如何查看和编辑
使用cat查看二进制,显示乱码 [root@localhost ~]# cat /var/log/wtmp ~~~reboot3.10.0-514.el7.x86_64 �YO#5~~~runleve ...
- VxWorks笔记
利用vxWorks可裁减可动态链接特性进行模块调试的分析 a) 首先,可将root.c简化,去掉大部分不需要加载的模块和想要调试的模块,以加快系统启动速度. b) 如果vxworks加载的.o中引用了 ...
- Scala下划线_使用
下划线这个符号几乎贯穿了任何一本Scala编程书籍,并且在不同的场景下具有不同的含义,绕晕了不少初学者.正因如此,下划线这个特殊符号无形中增加Scala的入门难度.本文希望帮助初学者踏平这个小山坡. ...
- ADB连接手机的两种方式(usb数据线连接和wifi连接)
ADB(Android Debug Bridge)安卓测试桥,它是连接电脑开发端和安卓设备的桥梁,这个安卓设备可以是真实的安卓手机或者平板,也可以是虚拟的安卓模拟器, 这里介绍ADB连接手机的两种 ...
- 持续集成--Jenkins--1
持续集成之Jenkins安装部署 1.安装JDK Jenkins是Java编写的,所以需要先安装JDK,这里采用yum安装,如果对版本有需求,可以直接在Oracle官网下载JDK. [root@l ...
- e生保plus
e生保plus https://m.health.pingan.com/share/products/esb_plus.html?re_from=qdlmMSDbxtj&order_from= ...
- Day 04 if判断,while循环,for循环
if判断语法一:if 条件: # 条件成立时执行的子代码块 代码1 代码2 代码3 示例:sex='female'age=18is_beautiful=True if sex == 'female' ...
- 浏览器实现PDF预览
1.使用jquery.media.js预览PDF <!DOCTYPE html> <html> <head> <meta charset="utf- ...