zoukankan      html  css  js  c++  java
  • android 上传文件到服务器

    Android客户端

    package com.example.testandroid;
     
    import java.io.DataOutputStream;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
     
    public class PhotoUpload extends Activity {
        private String newName = "image.jpg";
        private String uploadFile = "/sdcard/image.JPG";// 要上传的文件
        private String actionUrl = "http://192.168.0.1:8080/PhotoUpload/servlet/UploadServlet";
        private TextView mText1;
        private TextView mText2;
        private Button mButton;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mText1 = (TextView) findViewById(R.id.myText2);
            // 文件路径:
            mText1.setText(uploadFile);
            mText2 = (TextView) findViewById(R.id.myText3);
            // 上传网址:
            mText2.setText(actionUrl);
            /* 设置mButton的onClick事件处理 */
            mButton = (Button) findViewById(R.id.myButton);
            mButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    uploadFile();
                }
            });
        }
     
        /* 上传文件至Server的方法 */
        private void uploadFile() {
            String end = " ";
            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);
     
                // 设置http连接属性
                con.setRequestMethod("POST");
                con.setRequestProperty("Connection""Keep-Alive");
                con.setRequestProperty("Charset""UTF-8");
                con.setRequestProperty("Content-Type",
                        "multipart/form-data;boundary=" + boundary);
     
                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 = new byte[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);
     
                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 */
        private void showDialog(String mess) {
            new AlertDialog.Builder(PhotoUpload.this).setTitle("Message")
                    .setMessage(mess)
                    .setNegativeButton("确定"new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                        }
                    }).show();
        }
    }



    服务器端servlet

    package com.demo;
     
    import java.io.File;
    import java.io.IOException;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.commons.fileupload.DiskFileUpload;
    import org.apache.commons.fileupload.FileItem;
     
    public class UploadServlet extends HttpServlet {
        public void 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(); // 需要导入commons-fileupload-1.2.2.jar
                                                        // http://commons.apache.org/fileupload/
            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);
        }
    }


    activity_main.xml

    <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" >
     
        <EditText
            android:id="@+id/myText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="116dp"
            android:ems="10"
            android:inputType="textPersonName" />
     
        <EditText
            android:id="@+id/myText3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/myText2"
            android:layout_below="@+id/myText2"
            android:layout_marginTop="45dp"
            android:ems="10" />
     
        <Button
            android:id="@+id/myButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/myText3"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="61dp"
            android:text="上传" />
     
    </RelativeLayout>
  • 相关阅读:
    利用单片机构成高精度PWM式12位D/A
    【转】FORMAT在DELPHI中的用法
    可定时温湿控制器
    用C#获取硬盘序列号,CPU序列号,网卡MAC地址
    Oracle笔记:查询表相关
    Oracle笔记:视图
    Oracle笔记:维护数据的完整性
    Oracle笔记:索引
    Oracle笔记:pl/sql例外处理
    Oracle笔记:逻辑备份与恢复
  • 原文地址:https://www.cnblogs.com/to-creat/p/5170009.html
Copyright © 2011-2022 走看看