zoukankan      html  css  js  c++  java
  • 手机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=" 100%; background-color: #eeeeee" cellspacing="2">
                        <tr style="background-color: White; font-weight: bold">
    
                            <td style=" 6%">
                                编号
                            </td>
                            <td style=" 20%">
                                文件名
                            </td>
                            <td style=" 25%; text-align: center">
                                类型
                            </td>
                            <td style=" 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
  • 相关阅读:
    vue3.0+vite+ts项目搭建axios封装(六)
    vue3.0+vite+ts项目搭建分环境打包(四)
    vue3.0+vite+ts项目搭建初始化项目(一)
    MFC数值型关联变量和控件型关联变量
    SVN服务端、客服端安装与配置
    (转)ev4加密视频破解 ev4破解工具 ev4转mp4转换器 【无视授权密码即可转换】
    C#中的记录(record)
    C#自定义转换(implicit 或 explicit)
    C#中的隐式转换
    C#中的显式转换
  • 原文地址:https://www.cnblogs.com/wdfrog/p/4640648.html
Copyright © 2011-2022 走看看