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 transient 知识点学习
今天看源码的时候看到这个关键字,完全没见过,不懂.好吧!学习一下. 我们都知道实现了Serilizable接口的类,便可以序列化,那么其中某些成员变量不想被序列化怎么办?就是利用transient这个 ...
- CS程序中XML编码Encode和解码Decode
VB6的代码,原则上只要是Windows系统均可以使用此方法 Function XMLEncode(ByVal text As String) As String Dim xmldoc Set xml ...
- MySQL Network--Localhost与127.0.0.1的差异
localhost为本地服务器,而127.0.01为本机地址.在使用localhost时不经过网卡传输,不受网络防火墙和网卡相关的限制,访问localhost不会被解析成ip地址,不会占用网卡和网络资 ...
- oracle-srvctl-output
############################## [grid@rac01 ~]$ crsctl query crs administratorCRS Administrator List: ...
- [转]Jboss基础
查看JBoss控制台JMX-Console //可以通过这个页面进行对 JBOSS 的各服务的配置和管理. http://localhost:8080/jmx-console/ 查看发布的WebSer ...
- python实现tail -f 功能
这篇文章最初是因为reboot的群里,有人去面试,笔试题有这个题,不知道怎么做,什么思路,就发群里大家讨论 我想了一下,简单说一下我的想法吧,当然,也有很好用的pyinotify模块专门监听文件变化, ...
- Jenkins入门-部署gitlab 项目(8)
目前很多公司代码管理已经迁入到了git上,大多数的公司使用的代码管理服务器是gitlab,目前持续交付的流行很多公司都采用Jenkins完成持续交付工作.首先我们需要通过Jenkins来获取我们的项目 ...
- postfix配置spf认证和dkim认证
1.为邮箱域名添加spf认证: 登录域名解析控制台添加txt记录: v=spf1 include:spf1.domain.com ~all spf1.domain.com A记录解析到你的固定IP ...
- Tensorflow之基于MNIST手写识别的入门介绍
Tensorflow是当下AI热潮下,最为受欢迎的开源框架.无论是从Github上的fork数量还是star数量,还是从支持的语音,开发资料,社区活跃度等多方面,他当之为superstar. 在前面介 ...
- Python多版本共存virtualenv配置
virtualenv 前提是已经安装好了python.我的ubuntu是自带了python2.7和python3.6 安装vrtualenv sudo apt-get install python-v ...