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

2020-10-16 10:04:21 浏览数 (1)

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

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

代码语言:javascript复制
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 
}

手机端:

代码语言:javascript复制
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()
}
代码语言:javascript复制
<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 
代码语言:javascript复制
<?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 

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

0 人点赞