遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

手机PC文件传输

QQ啥的现在直接无法全部退出,很纠结后台运行,时不时的来条消息,明明电脑QQ还开着,越来越流氓了。

服务端代码:

<%@ Page Language="C#" %>

<script runat="server">
    
   static readonly string C_FileRoot = "/PFiles/";

    private System.Web.Script.Serialization.JavaScriptSerializer Serializer { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
           Serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            Response.ContentType = "text/json";
            Response.Expires = -1;

            var method = Request["m"];

            if (string.Compare(method, "upload", true) == 0)
            {
                DoUpload();
            }
            else if (string.Compare(method, "checkUpdate", true) == 0)
            {
                DoCheckUpdate();
            }
            else if (string.Compare(method, "download", true) == 0)
            {
                DoDownload();
            }
            else if (string.Compare(method, "getList", true) == 0)
            {
                DoGetList();
            }
            else
            {
                DoShow();
            }
        

    }
    private void DoShow()
    {
        Response.ContentType = "text/html";
    }
    private void DoGetList()
    {
        var sb = new StringBuilder();
        var clientNo = Request["ClientNo"];
        using (var writer = new HtmlTextWriter(new System.IO.StringWriter(sb)))
        {

            Repeater1.DataSource = Queue.Where(ent => ent.ClientNo == clientNo).OrderByDescending(ent => ent.AddTime).Take(100).ToList();
            Repeater1.DataBind();
            Repeater1.RenderControl(writer);
            writer.Flush();
        }
      
        Response.Write(sb.ToString());
        Response.End();
    }
    private void DoCheckUpdate()
    {
        try
        {
            var clientNo = Request["ClientNo"];
            var maxAddTime = Queue.Where(ent => ent.ClientNo ==clientNo).Max(ent=>ent.AddTime);
            if (maxAddTime == null) maxAddTime = new DateTime(2015, 07, 12);
            Response.Write(Serializer.Serialize(new BaseResponse<String>(){Code=0,Msg=DateTime.Now.ToString(),Model=maxAddTime.Value.ToString("yyyy-MM-dd HH:mm:ss")}));

        }
        catch (Exception ex)
        {
            var resp = new FilePostResponse() { Code = -1, Msg = Uri.EscapeUriString(ex.Message) };
            Response.Write(Serializer.Serialize(resp));
        }
        Response.End();
    }
    private void DoDownload()
    {
        try
        {
            long  id =long.TryParse( Request["FId"],out id) ? id : -1;
            var doc = Queue.FirstOrDefault(ent => ent.FileId == id);
            if (doc != null)
            {
                Response.ContentType = doc.MIME;
                Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(doc.Name + System.IO.Path.GetExtension(doc.Path), Encoding.GetEncoding("utf-8")));

                Response.TransmitFile(System.Web.Hosting.HostingEnvironment.MapPath(doc.Path));
                Response.Flush();
            }
            else
            {
                throw new Exception("文件不存在!");
            }
        }
        catch (Exception ex)
        {
            var resp = new FilePostResponse() { Code = -1, Msg = Uri.EscapeUriString(ex.Message) };
            Response.Write(Serializer.Serialize(resp));
        }
        Response.End();
    }
    private void DoUpload()
    {
        try
        {

            if (Request.Files.Count <= 0) throw new Exception("没有文件上传!");


            SaveFile();
        }
        catch (Exception ex)
        {
            var resp = new FilePostResponse() { Code = -1, Msg = Uri.EscapeUriString(ex.Message) };
            Response.Write(Serializer.Serialize(resp));
        }
        Response.End();
    }

        private void  SaveFile()
        {
         

            var file = Request.Files[0];
            var ext = System.IO.Path.GetExtension(file.FileName);


            //确保目录存在
            string path =  C_FileRoot + DateTime.Now.ToString("yyyy-MM-dd") + "/";

            if (!System.IO.Directory.Exists( System.Web.Hosting.HostingEnvironment.MapPath(path)))
            {
                System.IO.Directory.CreateDirectory(System.Web.Hosting.HostingEnvironment.MapPath(path));
            }
            //合成文件名
            var filename= path + Guid.NewGuid().ToString("N").Substring(0,8) + ext;

            var resp = new FilePostResponse();
            resp.MIME = file.ContentType;
            resp.Size = file.ContentLength / 1024;
            resp.ClientNo = Request["ClientNo"];
            resp.Name =Uri.EscapeUriString( System.IO.Path.GetFileNameWithoutExtension(file.FileName));
            resp.Path =Uri.EscapeUriString( filename);
            resp.Code = 0;
            resp.Msg = "Success";


           

            //保持文件
            file.SaveAs(System.Web.Hosting.HostingEnvironment.MapPath(filename));

     
            Response.Write(Serializer.Serialize(resp));
            EnQueue(resp);
        }






        private static int GFileId = 0;
        private static System.Collections.Concurrent.ConcurrentQueue<FilePostResponse> Queue = new System.Collections.Concurrent.ConcurrentQueue<FilePostResponse>();
        private void EnQueue(FilePostResponse fp)
        {
            if (Queue.Count > 1200)
            {
                while (Queue.Count > 800)
                {
                    FilePostResponse outIt = null;
                    Queue.TryDequeue(out outIt);
                }
            }
            Queue.Enqueue(fp);
        }
        public class BaseResponse<T>
        {
            public int Code { get; set; }
            public String Msg { get; set; }
            public T Model { get; set; }
        }
        public class FilePostResponse
        {
            public FilePostResponse()
            {
                System.Threading.Interlocked.Increment(ref GFileId);
                this.FileId = GFileId;
                AddTime = DateTime.Now;
            }
            public int Code { get; set; }
            public string Msg { get; set; }
            public string Path { get; set; }
            public string Name { get; set; }
            public long Size { get; set; }
            public string MIME { get; set; }
            public long FileId { get; set; }
            public DateTime? AddTime { get; set; }
            public String ClientNo{get;set;}

        }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>手机PC文件传输</title>
<link href="/Styles/Site.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/Scripts/jquery-1.4.1.js"></script>
    <script type="text/javascript">
        var lastUploadTime = "2015-07-10";
        $(document).ready(function () {
            setInterval(queryData, 1000);
        });

        function queryData() {

            var clientNo = $("#clientNo").val();
            if (clientNo == null || clientNo == "") return;


            var url = "/FilePost.aspx?m=checkUpdate&clientNo=" + clientNo;

            $.getJSON(url, function (json) {
                if (json.Code == 0) {
                    $("#freshTime").text(json.Msg);
                    if (json.Model > lastUploadTime) {
                        lastUploadTime = json.Model;
                        //console.log(json.Model);
                        var getListUrl = "/FilePost.aspx?m=getList&clientNo=" + clientNo;
                        $("#panelShow").load(getListUrl, { m: "getList()", rnd: new Date().getTime() });
                    }
                } else {
                   // console.log(json.Msg);
                    $("#tips").text(unescape(json.Msg));
                }

            });
        }


    </script>

</head>
<body>

    <div class="page">
        <div class="header">
            <div class="title">
                <h1>
                   手机PC文件传输
                </h1>
            </div>
            <div class="loginDisplay">
                
                        [ <a href="#" id="HeadLoginView_HeadLoginStatus">登录</a> ]
                    
            </div>
            <div class="clear hideSkiplink">
     
            </div>
        </div>
        <div class="main">
            
        <h2>
            FILE POST
        </h2>
        <div> <input type="text" id="clientNo" value="" />注意:必须提供手机上的编号,<span id="freshTime"></span> </div>
       <div id="panelShow" >
      <asp:Repeater ID="Repeater1" runat="server">
                  <HeaderTemplate>
                <table style="width: 100%; background-color: #eeeeee" cellspacing="2">
                    <tr style="background-color: White; font-weight: bold">

                        <td style="width: 6%">
                            编号
                        </td>
                        <td style="width: 20%">
                            文件名
                        </td>
                        <td style="width: 25%; text-align: center">
                            类型
                        </td>
                        <td style="width: 20%; text-align: center">
                          时间
                        </td>
                        <td style="text-align: center">
                           &nbsp;
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr style="background-color: White;">

                    <td>
                       <%#Eval("FileId") %>
                    </td>
                    <td>
                     <%#Eval("Name") %>
                    </td>
                    <td style="text-align: center">
                         <%#Eval("MIME")%>
                    </td>
                     <td style="text-align: center">
                         <%#Eval("AddTime")%>
                    </td>

                     <td style="text-align: center">
                         <a href='FilePost.aspx?m=download&FId=<%#Eval("FileId") %>' target="_blank">下载</a>
                    </td>
        
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>
      </div>
       <div id="tips"></div>


        </div>
        <div class="clear">
        </div>
    </div>
    <div class="footer">
        
    </div>
    
</body>
</html>
View Code

Android

package cn.fstudio.filepost;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.UUID;

import sync.http.AsyncHttpClient;
import sync.http.AsyncHttpResponseHandler;
import sync.http.RequestParams;
import cn.fstudio.util.PreferencesUtils;
import cn.fstudio.util.StringUtil;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;
import android.provider.MediaStore;

public class MainActivity extends Activity implements OnClickListener {

    Button btnSave = null;
    EditText txtUrl = null;
    TextView txtNo=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();

        handleSendIntent();

    }

    private void handleSendIntent() {
        Intent intent = getIntent();
        String action = intent.getAction();
        String type = intent.getType();

        if (Intent.ACTION_SEND.equals(action) && type != null) {

            Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
            if (uri != null) {
                
                UploadFile( uri);
            }

        }
    }

    private void initView() {
        txtNo=(TextView)findViewById(R.id.txtNo);
        btnSave = (Button) findViewById(R.id.button1);
        btnSave.setOnClickListener(this);
        txtUrl = (EditText) findViewById(R.id.textView1);
        String url = PreferencesUtils.getStringPreference(
                getApplicationContext(), "url", "192.168.9.5:7986");
        txtUrl.setText(url);
        
        String clientNo = PreferencesUtils.getStringPreference(
                getApplicationContext(), "ClientNo", "");
        txtNo.setText(clientNo);
        Log.i("T","ClientNO:" + clientNo);
        
        
        
        if(StringUtil.isNullOrEmpty(clientNo)){
          clientNo=     UUID.randomUUID().toString().replace("-", "").substring(14,20);
          Toast.makeText(this, clientNo, Toast.LENGTH_LONG).show();
          txtNo.setText(clientNo);
            PreferencesUtils.setStringPreferences(this,
                    "ClientNo", clientNo);
        }
    }

    /* Begin Upload file */
    private ProgressDialog dialog;

    private void UploadFile(Uri uri) {
        String ip = txtUrl.getEditableText().toString();
        String clientNo=txtNo.getText().toString();
        String file_path ="";

        

        String url = "http://" + ip + "/filePost.aspx?m=upload&ClientNo=" + clientNo;
        Log.d("T", url);

        /*处理 媒体 Uri类型*/
        if (uri.toString().startsWith("content:")) {
            

            String[] proj = { MediaStore.Images.Media.DATA };
            Cursor actualimagecursor = this.managedQuery(uri, proj, null, null,null);
            int actual_image_column_index = actualimagecursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            actualimagecursor.moveToFirst();

            file_path = actualimagecursor.getString(actual_image_column_index);
            actualimagecursor.close();
        }else {
            file_path=uri.getPath();
        }
        /*上传文件参数*/
        RequestParams requestParams = new RequestParams();
        Log.i("T","file_path" +file_path);
        File file = new File(file_path);
        try {
            requestParams.put("file", file);
        } catch (FileNotFoundException e) {
            Log.d("T", e.getMessage());
        }
        AsyncHttpClient client = new AsyncHttpClient();
        client.post(url, requestParams, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String response) {
                Toast.makeText(MainActivity.this, "完成", Toast.LENGTH_SHORT)
                .show();
                Log.d("T", response);
                
            }

            @Override
            public void onStart() {
                // TODO Auto-generated method stub

                dialog = ProgressDialog.show(MainActivity.this, null,
                        "正在上传文件...");
            }

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub

                dialog.dismiss();
                super.onFinish();
                //MainActivity.this.finish();
            }

            @Override
            public void onFailure(Throwable error, String content) {
                Log.d("T", content);
                Toast.makeText(MainActivity.this, "上传失败!", Toast.LENGTH_SHORT)
                        .show();
                super.onFailure(error, content);
            }
        });
    }

    /* End Upload File */

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        if (arg0.getId() == R.id.button1) {

            String urlString = txtUrl.getText().toString();
            PreferencesUtils.setStringPreferences(getApplicationContext(),
                    "url", urlString);

            Toast.makeText(this, "配置已经保存", Toast.LENGTH_SHORT).show();
        }
    }

}
View Code

Android 配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cn.fstudio.filepost"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
    </uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.SEND_SMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_SMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_OWNER_DATA" >
    </uses-permission>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
    </uses-permission>
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="cn.fstudio.filepost.MainActivity"
            android:screenOrientation="portrait" 
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

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

                <data android:mimeType="*/*" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

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

                <data android:mimeType="text/plain" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE" />

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

                <data android:mimeType="image/*" />
            </intent-filter>
        </activity>
    </application>

</manifest>
View Code

 

posted on 2015-07-12 10:50  遗忘海岸  阅读(310)  评论(0编辑  收藏  举报