android通过servlet服务器保存文件到手机
16lz
2021-01-23
服务器端:(手机和电脑连接的同一个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;@Overrideprotected 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() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Log.i("button1", "button1");fun_HttpPost();}});}public void fun_HttpPost() {new Thread(new Runnable() {@Overridepublic 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 从webview中读取缓存的图片
- android 网络读取图片 带进度条
- android 多点触摸 实现图片缩放 Image Zoom
- Android应用程序之间共享文字和图片(二)
- android中setImageResource加载大图片出现oom解决方案
- Android跳转系统相机或相册获取图片
- android对大图片的缓存处理
- android 根据SD卡中图片路径读取并显示SD中的图片――源代码
- Android中多层Fragment嵌套,调用相册返回Uri无法显示图片的问题解