本实例实现了android上传手机图片至服务器,服务器进行保存
服务器servlet代码
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String temp=request.getSession().getServletContext().getRealPath("/")+"temp"; //临时目录
System.out.println("temp="+temp);
String loadpath=request.getSession().getServletContext().getRealPath("/")+"Image"; //上传文件存放目录
System.out.println("loadpath="+loadpath);
DiskFileUpload fu =new DiskFileUpload();
fu.setSizeMax(1*1024*1024); // 设置允许用户上传文件大小,单位:字节
fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节
fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
//开始读取上传信息
int index=0;
List fileItems =null;
try {
fileItems = fu.parseRequest(request);
System.out.println("fileItems="+fileItems);
} catch (Exception e) {
e.printStackTrace();
}
Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
while (iter.hasNext())
{
FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息
if (!item.isFormField())
{
String name = item.getName();//获取上传文件名,包括路径
name=name.substring(name.lastIndexOf("\\")+1);//从全路径中提取文件名
long size = item.getSize();
if((name==null||name.equals("")) && size==0)
continue;
int point = name.indexOf(".");
name=(new Date()).getTime()+name.substring(point,name.length())+index;
index++;
File fNew=new File(loadpath, name);
try {
item.write(fNew);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else//取出不是文件域的所有表单信息
{
String fieldvalue = item.getString();
//如果包含中文应写为:(转为UTF-8编码)
//String fieldvalue = new String(item.getString().getBytes(),"UTF-8");
}
}
String text1="11";
response.sendRedirect("result.jsp?text1="+ text1);
}
android客户端代码
public class PhotoUpload extends Activity {
private String newName ="image.jpg";
private String uploadFile ="/sdcard/image.JPG";
private String actionUrl ="http://192.168.0.71:8086/HelloWord/myForm";
private TextView mText1;
private TextView mText2;
private Button mButton;
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.photo_upload);
mText1 = (TextView) findViewById(R.id.myText2);
//"文件路径:\n"+
mText1.setText(uploadFile);
mText2 = (TextView) findViewById(R.id.myText3);
//"上传网址:\n"+
mText2.setText(actionUrl);
/* 设置mButton的onClick事件处理 */
mButton = (Button) findViewById(R.id.myButton);
mButton.setOnClickListener(new View.OnClickListener()
{
publicvoid onClick(View v)
{
uploadFile();
}
});
}
/* 上传文件至Server的方法 */
privatevoid uploadFile()
{
String end ="\r\n";
String twoHyphens ="--";
String boundary ="*****";
try
{
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");
/* setRequestProperty */
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type",
"multipart/form-data;boundary="+boundary);
/* 设置DataOutputStream */
DataOutputStream ds =
new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; "+
"name=\"file1\";filename=\""+
newName +"\""+ end);
ds.writeBytes(end);
/* 取得文件的FileInputStream */
FileInputStream fStream =new FileInputStream(uploadFile);
/* 设置每次写入1024bytes */
int bufferSize =1024;
byte[] buffer =newbyte[bufferSize];
int length =-1;
/* 从文件读取数据至缓冲区 */
while((length = fStream.read(buffer)) !=-1)
{
/* 将资料写入DataOutputStream中 */
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
/* close streams */
fStream.close();
ds.flush();
/* 取得Response内容 */
InputStream is = con.getInputStream();
int ch;
StringBuffer b =new StringBuffer();
while( ( ch = is.read() ) !=-1 )
{
b.append( (char)ch );
}
/* 将Response显示于Dialog */
showDialog("上传成功"+b.toString().trim());
/* 关闭DataOutputStream */
ds.close();
}
catch(Exception e)
{
showDialog("上传失败"+e);
}
}
/* 显示Dialog的method */
privatevoid showDialog(String mess)
{
new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
.setMessage(mess)
.setNegativeButton("确定",new DialogInterface.OnClickListener()
{
publicvoid onClick(DialogInterface dialog, int which)
{
}
})
.show();
}
}
原文出自:http://www.cnblogs.com/gzggyy/archive/2011/08/02/2125237.html
http://www.android188.com:8080/
分享到:
相关推荐
本教程将深入探讨如何在Android客户端实现文件的图片上传,并与服务端进行交互。我们将涵盖以下几个关键知识点: 1. **图片选择**: 在Android应用中,用户通常需要从手机相册或相机中选择图片。这可以通过Intent来...
通过以上步骤,你可以构建一个基本的图片上传系统,将Android设备上的图片安全、高效地上传到PHP服务器。这个过程中涉及的技能包括Android网络编程、PHP文件处理以及服务器配置,都是开发者必备的基础知识。在实际...
本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及图片上传的实现细节。 ### 1. 文件上传基础 #### 1.1 获取文件 在Android中,用户可以选择文件,通常通过Intent的ACTION_PICK或者ACTION_GET_...
在Android平台上,图片文件的上传是一项常见的任务,尤其在开发社交、电商或者任何涉及用户交互的应用时。...理解这些概念并熟练运用,能帮助你在Android应用开发中实现高效、稳定的图片上传功能。
在Android平台上实现亚马逊S3(Amazon Simple Storage Service)文件上传是一项常见的任务,特别是在移动应用开发中需要存储用户数据或应用程序资源时。以下是一份详细的知识点解析,涵盖了标题和描述中提到的关键点...
在Android开发中,构建一个网盘Demo,实际上就是创建一个能够实现文件上传、下载、查看、管理的应用。这个项目通常涉及网络编程、文件操作、用户界面设计等多个方面。下面我们将深入探讨这个主题。 首先,我们来...
1. 自定义文件选择器:为了实现文件选择器,开发者通常需要创建一个自定义的Dialog或Activity,展示设备上的文件结构。这通常涉及到对Android的`DocumentFile`类和`Storage Access Framework (SAF)`的使用。`...
- 虽然上述方式能实现文件上传,但代码较复杂,容易出错。推荐使用成熟的网络库,如OkHttp、Retrofit、Volley等,它们提供了更方便的接口来处理文件上传。 通过以上步骤,我们可以在Android应用中实现表单形式的...
本篇文章将详细探讨如何创建一个名为“Android图片上传队列Service”的组件,以及其背后的原理和实现策略。 首先,我们需要理解“图片上传队列”的概念。它是一种任务调度机制,用于管理用户的图片上传操作,确保在...
本篇将详细讲解如何在Android中实现文件上传,并结合“亲测可用”的控件来探讨具体实践。 首先,我们需要了解Android中的文件操作。Android系统提供了一系列API,允许开发者读取、写入和管理本地文件。例如,你可以...
在Android开发中,集成阿里云对象存储服务(OSS)以实现图片上传是一个常见的需求。OSS 是一种云存储服务,允许开发者将大量的文件存储在云端,并能够方便地进行访问和管理。以下是对这个主题的详细讲解。 1. **...
首先,我们需要理解Volley的基本工作原理以及如何构建一个表单数据请求来实现文件上传。 ### 1. Volley介绍 Volley是由Google开发的网络库,它设计的目标是快速、简单地处理网络请求。Volley提供了异步请求处理、...
在图片上传过程中,可以使用`AsyncTask`或`Handler`更新UI,展示上传进度。如果使用第三方库如Retrofit,还可以通过拦截器获取上传进度。 8. **错误处理**: 要处理各种可能出现的错误,如网络异常、文件不存在、...
3. **图片上传到服务器**:选择了图片之后,我们需要将其上传到服务器。这通常涉及到网络编程,使用HTTP或HTTPS协议。Android提供了HttpURLConnection或OkHttp等库来实现网络请求。 - **创建HTTP请求**:创建POST...
在Android平台上,实现文件的上传和下载是移动应用开发中常见的功能需求,尤其对于涉及到数据交互、资源共享的应用来说,这是必不可少的部分。以下我们将详细探讨如何在Android中进行文件的上传和下载。 首先,我们...
Android开发实现保存图片到手机相册功能需要考虑多种因素,包括图片格式、手机品牌、文件操作技巧和权限的申请等。通过本文的介绍和代码实现,开发者可以更好地理解和实现保存图片到手机相册功能。
在Android应用开发中,有时需要将本地文件上传到服务器,以实现数据同步或者备份功能。在本场景中,我们讨论的是如何将Android设备上的文件上传到由C#编写的Web服务(WebService)。以下是对这个过程的详细解释: 1...
综上所述,OkGo 网络框架结合 Android 7.0 的权限管理,为开发者提供了高效稳定的图片上传解决方案。在实际应用中,还需要关注网络状态、错误处理、用户体验等方面,确保图片上传功能的完整性和可靠性。
压缩文件包含了android端和web端,web端使用myeclipse8.5开发的,...具体实现了手机选择相册图片或者拍照能预览图片并将图片上传到服务器。发布到手机上测试可能需要手动在手机权限管理中打开摄像头和文件读写的权限。
本篇文章将聚焦于Retrofit2如何实现文件上传,并且在上传过程中展示进度,同时也涉及到RxJava的运用。不过请注意,此示例并未涵盖权限管理,因为它仅作为多文件上传和进度显示的演示。 首先,我们需要了解Retrofit2...