前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android通过servlet服务器保存文件到手机

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

作者头像
砸漏
发布2020-10-16 10:04:21
7000
发布2020-10-16 10:04:21
举报
文章被收录于专栏:恩蓝脚本

本文实例为大家分享了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 

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档