精华内容
下载资源
问答
  •  我做网站的监控,WebClient.DownloadFile方法我经常用到的,必要的时候肯定要从网上下载些什么(WebRequest 也可以下载网络文件,不妨搜下,不过WebClient.DownloadFile使用更简单)。  今天简单的演示...

    线程机制(避免卡屏),异步下载文件。

      我做网站的监控,WebClient.DownloadFile这个方法是我经常用到的,必要的时候肯定是要从网上下载些什么(WebRequest 也可以下载网络文件,不妨搜下,不过WebClient.DownloadFile使用更简单)。

     

      今天简单的演示下WebClient.DownloadFileAsync的使用,刚刚写好的实例,有问题你拍我。

      解释什么的都不需要了吧。这里面应用了线程机制,异步调用。wo先展示代码,在把一些关键点放置到后面,并给一些修改建议(设计器生成代码在下,可以不用看,只需要复制粘贴使用)。

    测试中用到的网络文件(随机抽取.exe,.rar,.zip),都是无害的,请放心测试:

    http://dl1sw.baidu.com/client/9h162/fzjqd.exe
    http://sq.onlinedown.net/down/sgbs.rar
    http://zj.down.chinaz.com/201408/bdswxt_v1.0.zip
    http://zj.down.chinaz.com/201408/zyzfwxt_v1.1.zip

     

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    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 System.Net;
    using System.Threading;
    using System.IO;
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            }
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                File.AppendAllText(AppDomain.CurrentDomain.BaseDirectory + "error.log", DateTime.Now.ToString() + "\t" + e.ExceptionObject.ToString() + Environment.NewLine);
            }
            /// <summary>
            /// 文件总数
            /// </summary>
            int _totalFile = 0;
            /// <summary>
            /// 已下载文件
            /// </summary>
            int _loadFile = 0;
            private void button1_Click(object sender, EventArgs e)
            {//Run
                string richText = richTextBox1.Text;
                if (string.IsNullOrEmpty(richText))
                {
                    MessageBox.Show("请在文本框中输入需要下载的网络文件");
                }
                Thread thread = new Thread(new ThreadStart(() => createWebClient(richText)));
                thread.Start();
            }
            //WebClient webClient = null;
            private void createWebClient(string richText)
            {
                string[] array = richText.Split(new string[] { "\r""\n" }, StringSplitOptions.RemoveEmptyEntries);
                _totalFile = array.Length;
                foreach (string item in array)
                {
                    WebClient webClient = new WebClient();
                    webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
                    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
                    string fileName = AppDomain.CurrentDomain.BaseDirectory + DateTime.Now.ToFileTimeUtc() + item.Substring(item.LastIndexOf('/') + 1);
                    webClient.DownloadFileAsync(new Uri(item), fileName);
                }
            }
            private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                this.Invoke(new MethodInvoker(delegate {
                    this.progressBar2.Value = e.ProgressPercentage;
                    this.label2.Text = string.Format("正在下载文件,完成进度{0}%  {1}/{2}(字节)"
                                        ,e.ProgressPercentage
                                        , e.BytesReceived
                                        , e.TotalBytesToReceive);
                 }));
            }
            private void webClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
            {
                _loadFile++;
                int percent = (int)(100.0 * _loadFile / _totalFile);
                this.Invoke(new MethodInvoker(delegate {
                    this.progressBar1.Value = percent;
                    this.label1.Text = string.Format("已完成文件下载{0}%  {1}/{2}(文件个数)"
                        , percent
                        , _loadFile
                        , _totalFile);
                }));
                if (sender is WebClient)
                {
                    ((WebClient)sender).CancelAsync();
                    ((WebClient)sender).Dispose();
                }
            }
            private System.ComponentModel.IContainer components = null;
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
            private void InitializeComponent()
            {
                this.progressBar1 = new System.Windows.Forms.ProgressBar();
                this.progressBar2 = new System.Windows.Forms.ProgressBar();
                this.label1 = new System.Windows.Forms.Label();
                this.label2 = new System.Windows.Forms.Label();
                this.label3 = new System.Windows.Forms.Label();
                this.label4 = new System.Windows.Forms.Label();
                this.richTextBox1 = new System.Windows.Forms.RichTextBox();
                this.button1 = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // progressBar1
                // 
                this.progressBar1.Location = new System.Drawing.Point(81, 160);
                this.progressBar1.Name = "progressBar1";
                this.progressBar1.Size = new System.Drawing.Size(330, 12);
                this.progressBar1.TabIndex = 0;
                // 
                // progressBar2
                // 
                this.progressBar2.Location = new System.Drawing.Point(81, 224);
                this.progressBar2.Name = "progressBar2";
                this.progressBar2.Size = new System.Drawing.Size(330, 12);
                this.progressBar2.TabIndex = 1;
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(59, 187);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(41, 12);
                this.label1.TabIndex = 2;
                this.label1.Text = "label1";
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(59, 252);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(41, 12);
                this.label2.TabIndex = 3;
                this.label2.Text = "label2";
                // 
                // label3
                // 
                this.label3.AutoSize = true;
                this.label3.Location = new System.Drawing.Point(12, 160);
                this.label3.Name = "label3";
                this.label3.Size = new System.Drawing.Size(65, 12);
                this.label3.TabIndex = 4;
                this.label3.Text = "总 进 度:";
                // 
                // label4
                // 
                this.label4.AutoSize = true;
                this.label4.Location = new System.Drawing.Point(12, 224);
                this.label4.Name = "label4";
                this.label4.Size = new System.Drawing.Size(65, 12);
                this.label4.TabIndex = 5;
                this.label4.Text = "当前进度:";
                // 
                // richTextBox1
                // 
                this.richTextBox1.Location = new System.Drawing.Point(14, 12);
                this.richTextBox1.Name = "richTextBox1";
                this.richTextBox1.Size = new System.Drawing.Size(397, 131);
                this.richTextBox1.TabIndex = 6;
                this.richTextBox1.Text = "";
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(150, 280);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(75, 23);
                this.button1.TabIndex = 7;
                this.button1.Text = "Run";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.Click += new System.EventHandler(this.button1_Click);
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(423, 315);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.richTextBox1);
                this.Controls.Add(this.label4);
                this.Controls.Add(this.label3);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.progressBar2);
                this.Controls.Add(this.progressBar1);
                this.MaximumSize = new System.Drawing.Size(439, 353);
                this.MinimumSize = new System.Drawing.Size(439, 353);
                this.Name = "Form1";
                this.Text = "WebClient下载实现实例";
                this.ResumeLayout(false);
                this.PerformLayout();
            }
            private System.Windows.Forms.ProgressBar progressBar1;
            private System.Windows.Forms.ProgressBar progressBar2;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.Label label3;
            private System.Windows.Forms.Label label4;
            private System.Windows.Forms.RichTextBox richTextBox1;
            private System.Windows.Forms.Button button1;
        }
    }

     

    大致看了一下,貌似就以下几句需要新手斟酌,大神请绕行。

    第一句: this.Invoke(new MethodInvoker(delegate {

    第二句:Thread thread = new Thread(new ThreadStart(() => createWebClient(richText)));

    第三句:if (sender is WebClient)

     

    第一句是关键的一句,不再创建控件的线程中调用/修改控件的属性值(Text),会报异常,为什么这么用就OK了?

    第二句,第三句就简单了,不提示了,不会了找度度。

     

    本程序可以添加的功能,添加一个Stop按钮,终断下载(请不要嗤之以鼻,在创建窗体的线程里操作new Thread让其立即终断下载,还是有点深度)










    本文转自 yuanzhitang 51CTO博客,原文链接:http://blog.51cto.com/yuanzhitang/1949842,如需转载请自行联系原作者
    展开全文
  • 做的一项目用canvas生成一张动态图片,可以保存到用户手机相册中, 测试提出来的问题: 生成海报二微码,偶尔会失败的问题,用了以下机型做了验证: 用了iponex,小米6,红米note8,ipone11等手机都没有出过错...

    配置downloadFile域名后,getImageInfo仍然fail

    做的一个项目是用canvas生成一张动态图片,可以保存到用户手机相册中,

    测试提出来的问题:

    生成海报二微码,偶尔会失败的问题,用了以下机型做了验证:
    用了iponex,小米6,红米note8,ipone11等手机都没有出过错,
    只有iqoo这款手机,点击生成海报5/6次都生成失败,偶尔也会成功。

    当时一脸懵逼,iQOO是什么手机,别的手机都可以成功只有这款失败,就在网上查找原因。

    查找以下配置,都能排除生成海报不成功原因:

    1、downloadFile域名配置正确无误

    2、图片域名是正确可访问的

    3、downloadFile 配置删除后重新配置过,调试工具重启过

    4、APPID也是正确的

    5、图片地址如下

    https://mp.weixin.qq.com/XXXX

    最后从网上找的资料,说需要配置request合法域名,我就试了试,因为我是下载图片,只需要在downloadFile配置域名就行了,但是我真的在request配置了https://mp.weixin.qq.com这个域名,又重新试试真的解决了。

    展开全文
  • 破问题搞得我很难受,由于项目我后来加入的,之前开发人员传入的filePath不是一具体的文件地址,也不知什么原因导致下载不了也预览不了。 直接代码 let fileType = “PNG”;//文件类型 let filePath = ...

    这个破问题搞得我很难受,由于项目我是后来加入的,之前开发人员传入的filePath不是一个具体的文件地址,也不知什么原因导致下载不了也预览不了。

    直接代码

    let fileType = “PNG”;//文件类型
    let filePath = "这里是需要下载的文件具体网络地址";
    uni.showLoading({
    		title: '文件下载中'
    });
    if(fileType){ 
    		fileType = fileType.toLowerCase();
    }
    //先下载文件
    uni.downloadFile({
    					url: encodeURI(filePath),//注意中文文件名的网络地址需要encodeURI
    					success(res) {  
    						uni.hideLoading();
    						//预览图片或打开文件
    						if(fileType == "png" || fileType == "jpg" || fileType == "jpeg"){
    						    // 图片的话直接预览
    							uni.previewImage({
    								urls: [res.tempFilePath]
    							});
    							uni.hideLoading();
    						}else{
    							uni.openDocument({
    								filePath: res.tempFilePath,
    								success() {
    								},
    								fail(e) {
    									uni.hideLoading();
    									uni.showToast({
    										icon: 'none',
    										title: '文件打开失败!'
    									});
    								}
    							});
    						}
    					},
    					fail() {
    						uni.hideLoading();
    						uni.showToast({
    							icon: 'none',
    							title: '下载出错!'
    						});
    					},
    					complete() {
    						uni.hideLoading();
    					}
    				});
    

    最重要的这个还是要看 需要下载的文件地址是否存在。还有要具体的文件地址。必须是小程序已经设置名单的域名下的文件才行。

    展开全文
  • 单一职责原则:一类,只有一引起它变化的原因。 ...但实际应用中还是比较难实现的,我们只能尽量符合这原则。 例子: public class Task { public File downloadFile(String path){
    单一职责原则:一个类,只有一个引起它变化的原因。

    为什么需要单一职责原则?
    如果一个类有多个原因要去修改它,那么修改一个功能时,可能会让其他功能产生Bug,所以一个类最好只有一个职责。但实际应用中还是比较难实现的,我们只能是尽量符合这个原则。

    例子:
    public class Task {
    	public File downloadFile(String path){
    		//下载文件
    		return null;
    	}
    	public String parseFile(File file){
    		//解析文件
    		return null;
    	}
    }


    比如,修改下载文件方式和修改解析文件方法就是两种引起类产生变化的原因。这就明显违背了单一职责的原则。所以我们需要把方法提炼到两个不同的类中。

    总结:
    1. 实际情况是,很多时候我们无法提前预见“引起变化的原因”,所以我们只能凭经验构造我们的接口,尽量做到一个接口只有一个职责。这里说的是接口,类可能会有继承和实现多个接口,更加难以实现单一职责。
    2. 当以前写的类已经有多个引起变化的原因时,我们最好做代码重构。
    展开全文
  • 1.单位换算问题,canvas的尺寸单位px,所以单位需要做换算,可以通过wx.getSystemInfo获取屏幕宽高(单位px),微信小程序无论什么机型,屏幕宽度都750rpx,因此可以做rpx和px之间的单位换算,问题就解决...
  • 前几天偶然看见一人脸识别的...其次,我在最开始一直没弄懂这”name”到底应该填什么,上传功能不好用我一直觉得”name”的原因,官方对于name给的解释很迷,这里我就给结论,大家不要纠结这属性,直接写file
  • 这两地方填的到底是什么?下载后文件存放的位置,还是服务端被下载的文件。如果被下载的文件,那么文件下载下来到哪了。 如果下载下来存放文件的路径,那么这段程序到if (fileinfo.Exists == true)就执行不...
  • 一开始被一篇ios预览PDF文件需要用到webview的博客给误导了,以为安卓预览文件需要调用wx.downloadFile()和wx.openDocument()这两API,而ios系统预览文件则要用webview标签才能实现,最后捣鼓了好长时间ios用...
  •  关于ios系统的bug这块也快把柚子给逼疯了啊,ios系统没有文件管理的,柚子用了很多办法,最后终于确定不管用什么办法ios都实现不了下载的,只能实现在线查看。所以没办法,如果不考虑兼容ios的话,很简单...
  • 在这里说的怪问题,小组总共四人,两人下载文件正常,两人总是从缓存中下载文件(即便文件已经更新)。显然这本地计算机的缓存策略在作怪,可是大家的开发环境基本一致为什么会出现不同的结果呢? 查阅了...
  • 1.要区分下载的内容是什么 0.1 图片下载wx.saveImageToPhotosAlbum(Object object) 0.2 视频下载wx.saveVideoToPhotosAlbum(Object object) 以上算是两大类 2.路径问题 图片文件路径,可以临时文件路径或永久...
  • sql注入实例分析

    2020-08-25 11:36:10
    什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它利用...
  • 我给的url,并不想自己每次都去手动显示此网页的所有内容,再来另存。 请教有什么方法可以保存所有内容? 2. 请教像这种有许多商品的网页,往下拉或者点击“更多”,才能在本页把剩下的内容显示出来。这怎么...
  • 请问,哪位大神能告知一下,为什么会出现这问题?要怎么做才能避免这问题呢? 另外 附一张17173的壁纸图片的URL: 下面我用的下载方法 `public void Download(string URL, string Dir) { ...
  • ",以表明将下载的文件作为附件,结果IE浏览器将会提示另存文件,而不是自动打开这文件(IE浏览器一般根据下载的文件扩展名决定执行什么操作,扩展名为doc的将用word程序打开,扩展名为pdf的将用acrobat程序打开...
  • struts2下载问题

    2010-05-09 19:47:57
    <param name="inputName">downLoadFile <param name="contentType">application/octet-stream;charset=ISO8859-1 <param name="contentDisposition">attachment;file="${file}" [/code] 能...
  • reqFTP.Method = WebRequestMethods.Ftp.DownloadFile; // 指定数据传输类型 reqFTP.UseBinary = true; reqFTP.UsePassive = false; // ftp用户名和密码 //reqFTP.Credentials = new NetworkCredential();...
  • 也就是说,如果抛出了ClientAbortException异常,那就跳转到“ignored.jsp”这页面,这页面中什么内容都没有。 还有一种办法在页面进行try..catch,之后什么都不做 异常原因分析: stream对应的类...
  • 介绍 GBlog-wx:微信小程序博客 我们只是搬运工,将color-ui样式...如果您发现了什么bug,或者有什么界面建议或意见, 欢迎 issue,当然也可以直接点小程序关于栏中的“联系我”或“意见反馈”或“留言”,或者

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

downloadfile是个什么