Android 上传文件到XP
Android部分:

AsyncHttpClient client = new AsyncHttpClient(); RequestParams requestParams = new RequestParams(); File file = new File("/sdcard/DCIM/Camera/IMG_20140322_180445.jpg"); try { requestParams.put("file", file); requestParams.put("userid", "张三"); } catch (FileNotFoundException e) { Log.d("T", e.getMessage()); } client.post("http://192.168.30.30:9178/?fn=upload", requestParams, new AsyncHttpResponseHandler() { @Override public void onSuccess(String response) { Log.d("T", response); } @Override public void onFailure(Throwable error, String content) { Log.d("T", content); super.onFailure(error, content); } });
服务端部分:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using HttpServer.HttpModules; using System.Net; using System.IO; using System.Threading; using HttpServer.FormDecoders; using System.Collections.Concurrent; namespace TestHttpServer { public partial class Form1 : Form { private HttpServer.HttpServer _server = null; public Form1() { InitializeComponent(); Console.WriteLine("UI:" + Thread.CurrentThread.ManagedThreadId); } private void button1_Click(object sender, EventArgs e) { _server = new HttpServer.HttpServer(); _server.Add(new FileUpHttpModule()); //_server.Add(new NotHandleModule()); _server.Start(IPAddress.Any, int.Parse(textBox1.Text)); Console.WriteLine("开启服务!"); } protected override void OnClosed(EventArgs e) { UploadFileMonitor.Instance.OnFileUpload -= this.DisplayPic; if (_server != null) { _server.Stop(); Console.WriteLine("关闭服务!"); } base.OnClosed(e); } private void button2_Click(object sender, EventArgs e) { new frmClient().Show(); } private void DisplayPic(string filename) { if (this.InvokeRequired) { Console.WriteLine("需要异步调用!"); this.Invoke( (Action) (() => { DisplayPic(filename); })); } else { pictureBox1.ImageLocation = filename; //pictureBox1.Refresh(); } } private void Form1_Load(object sender, EventArgs e) { UploadFileMonitor.Instance.OnFileUpload += this.DisplayPic; } } #region 上传监控 public class UploadFileMonitor { const int C_MaxQueueLength = 100; public delegate void OnFileUploadHandler(string filename); private ConcurrentQueue<String> _Queue = new ConcurrentQueue<string>(); public event OnFileUploadHandler OnFileUpload; private static readonly UploadFileMonitor _Instacne = new UploadFileMonitor(); public static UploadFileMonitor Instance { get { return _Instacne; } } private UploadFileMonitor() { } public void Add(string filename) { _Queue.Enqueue(filename); while (_Queue.Count > C_MaxQueueLength +10) { String retrive = ""; _Queue.TryDequeue(out retrive); } if (OnFileUpload != null) { try { OnFileUpload(filename); } catch { } } } } #endregion public class FileUpHttpModule : HttpModule { public override bool Process(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session) { try { Console.WriteLine("work:" + Thread.CurrentThread.ManagedThreadId); var it = request.QueryString["fn"]; Console.WriteLine("userId:" + request.Form["userid"].Value); Console.WriteLine(it); String filename = ""; foreach (var file in request.Form.Files) { filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.Ticks + Path.GetExtension(file.UploadFilename)); File.Copy(file.Filename, filename, true); UploadFileMonitor.Instance.Add(filename); } StreamWriter writer = new StreamWriter(response.Body); if (string.IsNullOrWhiteSpace(filename)) { writer.WriteLine("no upload file!"); } else { writer.WriteLine(filename); } writer.Flush(); } catch (Exception ex) { StreamWriter writer = new StreamWriter(response.Body); writer.WriteLine(ex.Message); writer.Flush(); } return true; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2012-04-22 早上没馒头