android通过servlet服务器保存文件到手机

本文实例为大家分享了android通过servlet服务器保存文件到手机的具体代码,供大家参考,具体内容如下

服务器端:(手机和电脑连接的同一个WIFI)

package com;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Encoder;

public class download extends HttpServlet {

/**

* Constructor of the object.

*/

public download() {

super();

}

/**

* Destruction of the servlet. <br>

*/

public void destroy() {

super.destroy(); // Just puts "destroy" string in log

// Put your code here

}

/**

* The doGet method of the servlet. <br>

*

* This method is called when a form has its tag value method equals to get.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// response.setContentType("text/html");

// PrintWriter out = response.getWriter();

// out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

// out.println("<HTML>");

// out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");

// out.println(" <BODY>");

// out.print(" This is ");

// out.print(this.getClass());

// out.println(", using the GET method");

// out.println(" </BODY>");

// out.println("</HTML>");

// out.flush();

// out.close();

doPost(request, response);

}

/**

* The doPost method of the servlet. <br>

*

* This method is called when a form has its tag value method equals to post.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

//request.setCharacterEncoding("utf-8");////这句至关重要,不然中文的文件名称显示乱码

PrintWriter out = response.getWriter();

// out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");

// out.println("<HTML>");

// out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");

// out.println(" <BODY>");

// out.print(" This is ");

// out.print(this.getClass());

// out.println(", using the POST method");

// out.println(" </BODY>");

// out.println("</HTML>");

out.print(GetImageStr());///输出文件的字符串

out.flush();

out.close();

}

/**

* Initialization of the servlet. <br>

*

* @throws ServletException if an error occurs

*/

public void init() throws ServletException {

// Put your code here

}

public static String GetImageStr()

{//将图片文件转化为字节数组字符串,并对其进行Base64编码处理

// String imgFile = "d://test.jpg";//待处理的图片

//String imgFile="F://upload//1.jpg";////可以

// String imgFile="F://upload//软工大作业.ppt";////可以

String imgFile="F://upload//爱的勇气.mp3";//不可以

// String imgFile="F://upload//upload.rar";//可以

InputStream in = null;

byte[] data = null;

//读取图片字节数组

try

{

in = new FileInputStream(imgFile);

data = new byte[in.available()];

in.read(data);

in.close();

}

catch (IOException e)

{

e.printStackTrace();

}

//对字节数组Base64编码

BASE64Encoder encoder = new BASE64Encoder();

return encoder.encode(data);//返回Base64编码过的字节数组字符串

} ///GetImageStr

}

手机端:

package com.example.getfile_2;

import java.io.FileOutputStream;

import java.io.OutputStream;

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.params.BasicHttpParams;

import org.apache.http.params.HttpConnectionParams;

import org.apache.http.util.EntityUtils;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

private static final int REQUEST_TIMEOUT = 5 * 1000;// 设置请求超时10秒钟

private static final int SO_TIMEOUT = 10*60 * 1000; // 设置请求超时时间10秒钟

private static final int LOGIN_OK = 1;

private Button button1, button2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button1 = (Button) findViewById(R.id.button1);

button2 = (Button) findViewById(R.id.button2);

button1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO 自动生成的方法存根

Log.i("button1", "button1");

fun_HttpPost();

}

});

}

public void fun_HttpPost() {

new Thread(new Runnable() {

@Override

public void run() {

// TODO 自动生成的方法存根

String urlStr = "http://192.168.0.102:8080/download/servlet/download";

HttpPost request = new HttpPost(urlStr);

try {

HttpClient client = getHttpClient();

// 执行请求返回相应

HttpResponse response = client.execute(request);

// 判断是否请求成功

if (response.getStatusLine().getStatusCode() == 200) {

// 获得响应信息

String responseMessage = EntityUtils.toString(response

.getEntity());

Log.i("responseMessage", responseMessage + ",长度:"

+ responseMessage.length());

GenerateImage(responseMessage);

Log.i("生成成功", "生成成功");

}

} catch (Exception e) {

e.printStackTrace();

}

}// //run()

}).start();

}// /fun_register()

//base64字符串转化成图片

public static boolean GenerateImage(String imgStr)

{ //对字节数组字符串进行Base64解码并生成图片

if (imgStr == null) //图像数据为空

return false;

Decoder.BASE64Decoder decoder = new Decoder.BASE64Decoder();

try

{

//Base64解码

byte[] b = decoder.decodeBuffer(imgStr);

for(int i=0;i<b.length;++i)

{

if(b[i]<0)

{//调整异常数据

b[i]+=256;

}

}

//生成jpeg图片

// String imgFilePath = "d://222.jpg";//新生成的图片

// String imgFilePath = "F://upload//1_2.jpg";///可以

//String imgFilePath = "F://upload//软工大作业_2.ppt";//可以

// String imgFilePath="F://upload//upload_2.rar";

// String imgFilePath="/sdcard/1spray/1_2.jpg";//可以

// String imgFilePath = "/sdcard/1spray/软工大作业_2.ppt";//可以

String imgFilePath ="/sdcard/1spray/爱的勇气_2.mp3";//9M不行了?????

OutputStream out = new FileOutputStream(imgFilePath);

out.write(b);

out.flush();

out.close();

return true;

}

catch (Exception e)

{

return false;

}

}

// 初始化HttpClient,并设置超时

public HttpClient getHttpClient() {

BasicHttpParams httpParams = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT);

HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT);

HttpClient client = new DefaultHttpClient(httpParams);

return client;

}// /public HttpClient getHttpClient()

}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="${relativePackage}.${activityClass}" >

<TextView

android:id="@+id/textView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world" />

<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/textView1"

android:layout_marginLeft="25dp"

android:layout_marginTop="142dp"

android:layout_toRightOf="@+id/textView1"

android:text="ButtonPost" />

<Button

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/button1"

android:layout_below="@+id/button1"

android:layout_marginTop="34dp"

android:text="ButtonGet" />

</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.getfile_2"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="15"

android:targetSdkVersion="16" />

<!-- 使用网络功能所需权限 -->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<!-- SDK离线地图和cache功能需要读写外部存储器 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 android通过servlet服务器保存文件到手机 的全部内容, 来源链接: utcz.com/p/242818.html

回到顶部