这是自己在练习做一个将图片上传到服务器端android应用时遇到的一些问题及一些常用的android代码的一些分享:
我设计了两种方法,一种是通过照相机拍照上传一种是上传本地照片的方式,但是其核心的内容都是一致的!下面我就以上传本地图片来进行说明:
1、首先是要从图库中选择图片,这个代码的格式比较固定:
Intent intent=new Intent();
intent.setType(IMAGE_TYPE); intent.setAction(Intent.ACTION_GET_CONTENT);//打开图像库
startActivityForResult(intent, 1);
2、接下来就是选择图片时得到选择图片的路径:
uri=data.getData();//获得图片的uri
try { //bm=MediaStore.Images.Media.getBitmap(cr, uri);
String[] proj={MediaStore.Images.Media.DATA};
//Cursor 是android.database包下的
Cursor cursor=managedQuery(uri, proj, null, null, null);
int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst(); //小心游标越界,要将其移动到前段
path=cursor.getString(column_index);
}
3、接下来就是服务器端和客户端的设计了,首先是服务器端的设计:
我这里就列出核心的代码
//这是一个servlet中的service方法
protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// System.out.println("out");
request.setCharacterEncoding("utf-8");
String imagePath=request.getSession().getServletContext().getRealPath("/")+"image";//存放上传照片的路径
//System.out.println("image---"+imagePath);
File dir=new File(imagePath);
if(!dir.exists()){
dir.mkdirs();
}
DiskFileItemFactory dfi=new DiskFileItemFactory();//是commons包下的
ServletFileUpload sfu=new ServletFileUpload(dfi);
sfu.setSizeMax(100*1024*1024); //设置最大可以上传的文件大小为100M
try {
List <FileItem>items=sfu.parseRequest(request);
for(int i=0;i<items.size();i++){
FileItem item=items.get(i);
String imageName="";
if(!item.isFormField()){
String fileName=item.getName(); imageName=fileName.substring(fileName.lastIndexOf("/")+1);
long size=item.getSize();
if((imageName==null||imageName.equals(""))&&size==0){ continue;
}
int point =imageName.indexOf(".");
imageName=(new Date()).getTime()+imageName.
substring(point,imageName.length());
File imageUpload=new File(imagePath,imageName);
item.write(imageUpload);
}else{//取出不是文件域的所有表单信息
String fieldValue=item.getString();
//如果包含中文应写为
//String fieldValue=new String(item.getString().getBytes(),"utf-8");
}
System.out.println("imageName"+imageName);
response.sendRedirect("index.jsp?file="+imageName);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
上面的代码显得有些乱但是核心的部分都已经记录下来!
4、客户端的主要代码如下:
String end = "\r\n";
String twoHyphens = "--";
String boundary = "*******";
DataOutputStream ds = null;
FileInputStream fis =null;
try {
System.out.println("NativeMethod");
URL url = new URL(actionUrl);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// 允许Input、output不适用Cache
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
/** 设置传送的method=post */
con.setRequestMethod("POST");
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "utf-8");
con.setRequestProperty("Content-type",
"multipart/form-data;boundary=" + boundary);
/** 设置dataOutputStream */
ds = new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disponsition: form-data; "
+ "name=\"file1\"; filenname=\"" + newName + "\"" + end);
ds.writeBytes(end);
// 取得文件的FileInputStream
fis = new FileInputStream(path);
/* 设置每次写入1024bytes */
byte[] buffer = new byte[1024];
int length = -1;
// 从文件读取数据至缓存区
while ((length = fis.read(buffer)) != -1) {
/* 将资料写入dataOutputStream */
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + end);
ds.flush();
// 取得Response的内容
InputStream is = con.getInputStream();
int ch;
StringBuffer b = new StringBuffer();
while ((ch = is.read()) != -1) {
b.append((char) ch);
}
System.out.println("toast part");
Toast.makeText(activity, b.toString() + "上传成功",
Toast.LENGTH_SHORT).show();
ds.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(activity, "图片上传失败!",
Toast.LENGTH_SHORT).show();
throw new RuntimeException(e);
} /*finally {
// 关闭流
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}*/
}
这里我需要说明一下,这些代码也是在我参考别人写的代码的基础上修改过来的,希望可以和大家分享!!
分享到:
相关推荐
本教程将详述如何使用Volley实现将图片文件上传至服务器的过程。首先,我们需要理解Volley的基本工作原理以及如何构建一个表单数据请求来实现文件上传。 ### 1. Volley介绍 Volley是由Google开发的网络库,它设计的...
在Android平台上,将图片上传到服务器是一项常见的任务,尤其在开发移动应用时,如社交网络、文件分享或在线购物等场景。本示例教程将帮助新手理解如何在Android Studio环境下,利用VS2015(Visual Studio 2015)的...
在Android客户端上传图片到服务器的过程中,涉及到的主要知识点包括网络编程、HTTP请求、文件处理以及可能用到的第三方库。下面将详细阐述这些内容。 首先,Android客户端与服务器之间的通信通常基于HTTP或HTTPS...
在Android平台上实现本地图片上传至服务器是一项常见的任务,尤其在开发移动应用时。这个过程涉及到客户端(Android设备)与服务器端(通常是一个Web服务)之间的数据交互。在本例中,我们将采用HttpClient或...
通过以上步骤,你可以构建一个基本的图片上传系统,将Android设备上的图片安全、高效地上传到PHP服务器。这个过程中涉及的技能包括Android网络编程、PHP文件处理以及服务器配置,都是开发者必备的基础知识。在实际...
在Android客户端调用Web Service上传图片到服务器的过程中,主要涉及以下几个关键知识点:...通过理解这些知识点,开发者可以实现Android客户端与服务器之间的图片上传和下载功能,有效地利用Web Service进行数据交互。
本文将详细讲解如何在Android的WebView中实现打开本地相册选择图片,并将其上传到服务器的功能。 首先,我们需要理解WebView的基本用法。WebView是Android SDK中的一个类,它提供了一个用于加载和显示网页的控件。...
在Android平台上,将图片上传到服务器是一个常见的任务,涉及到客户端(Android应用)和服务器端(通常为Web服务)的交互。以下将详细讲解这个过程的关键步骤、涉及的技术和注意事项。 一、客户端(Android应用)...
在Android应用开发中,图片上传至服务器是一项常见的需求,尤其在社交、电商或者任何需要用户分享内容的应用中。本文将详细讲解如何...正确理解和掌握这些知识点,能够帮助开发者在实际开发中顺利实现图片上传功能。
在Android平台上,将图片上传到Web服务器是一项常见的任务,尤其在开发涉及用户交互的应用时,如社交应用、电商应用等。这个"android上传图片到web服务器"的示例提供了使用HttpPost和MultiPartEntity方法实现这一...
在Android应用开发中,将图片上传到服务器是常见的需求,比如用户头像更新、分享图片或者保存用户生成的内容。这个过程涉及到多个技术点,包括图片的读取、压缩、网络请求以及服务器端的处理。接下来,我们将详细...
压缩文件包含了android端和web端,web端使用myeclipse8.5开发的,...具体实现了手机选择相册图片或者拍照能预览图片并将图片上传到服务器。发布到手机上测试可能需要手动在手机权限管理中打开摄像头和文件读写的权限。
在Android开发中,有时我们需要实现将手机上的图片上传到服务器的功能。这个场景通常涉及客户端(Android应用)与服务器端(PHP脚本)的交互。在这个过程中,用户选择一张图片,然后通过HTTP请求将图片数据发送到PHP...
在Android应用开发中,图片上传是一项常见的功能,它涉及到客户端(Android设备)与服务器之间的数据交互。本资源提供了一个完整的示例,涵盖了Android客户端如何上传图片以及服务器如何接收和处理这些图片的全过程...
在Android开发中,实现“涂鸦上传到服务器”的功能涉及到多个技术点,包括用户界面设计、图像处理、网络通信以及服务器端的接口处理。以下是对这些知识点的详细说明: 1. **用户界面设计**:首先,我们需要创建一个...
本文将详细讲解如何在Android中实现图片的选取、上传至服务器以及从服务器下载图片,并将其存储到MySQL数据库的过程。 首先,我们需要处理图片的选取。Android提供了多种方式让用户选择图片,如使用系统的相册或...
在Android应用开发中,文件上传是一项常见的功能,通常用于向服务器发送用户生成的数据,如图片、音频或视频。本教程将详细介绍如何通过HTTP协议在Android客户端实现文件上传,并在服务器端使用Servlet进行处理。 ...
在Android应用开发中,有时需要将用户拍摄或选择的图片上传至服务器进行存储或处理。本教程主要讲解如何实现Android客户端通过Base64编码方式上传图片到基于Spring MVC的服务器。我们将涵盖以下关键知识点: 1. **...