Exemple #1
0
        /// <summary>
        /// 合并上传的分块
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private async Task <bool> Merge(string filePath, string dir)
        {
            using (HttpClient httpClient = new HttpClient()
            {
                Timeout = TimeSpan.FromSeconds(10)
            })
            {
                try
                {
                    string fileName = Path.GetFileName(filePath);
                    if (!string.IsNullOrEmpty(dir))
                    {
                        fileName = Path.Combine(dir, Path.GetFileName(filePath)).Replace(Path.DirectorySeparatorChar, '/');
                    }
                    var result = await httpClient.GetAsync(this.mergeURL + "?fileName=" + fileName);

                    if (result.IsSuccessStatusCode)
                    {
                        JsonRespondResult respondResult = JsonConvert.DeserializeObject <JsonRespondResult>(await result.Content.ReadAsStringAsync());
                        if (!respondResult.Result)
                        {
                            this.OnUploadError(new ErrorArgs(respondResult.Message));
                        }
                        return(respondResult.Result);
                    }
                }
                catch (Exception ex)
                {
                    this.OnUploadError(new ErrorArgs(ex.Message));
                }
            }
            return(false);
        }
Exemple #2
0
        /// <summary> 删除版本
        /// </summary>
        /// <param name="version">版本号</param>
        public async Task <bool> DeleteVersion(string version)
        {
            using (HttpClient httpClient = new HttpClient())
            {
                try
                {
                    HttpResponseMessage httpResponseMessage = await httpClient.DeleteAsync(this.url + "/deleteVersion?version=" + version);

                    if (httpResponseMessage.IsSuccessStatusCode)
                    {
                        JsonRespondResult respondResult = JsonConvert.DeserializeObject <JsonRespondResult>(await httpResponseMessage.Content.ReadAsStringAsync());
                        if (!respondResult.Result)
                        {
                            this.OnUpgradeError(new ErrorArgs(respondResult.Message));
                        }
                        return(respondResult.Result);
                    }
                }
                catch (Exception ex)
                {
                    this.OnUpgradeError(new ErrorArgs(ex.Message));
                    return(true);
                }
            }
            return(false);
        }
Exemple #3
0
        /// <summary>
        /// 获取文件版本号
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public async Task <string> GetVersion(string fileName)
        {
            using (HttpClient httpClient = new HttpClient())
            {
                try
                {
                    HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(this.url + "/getFileVersion?fileName=" + fileName);

                    if (httpResponseMessage.IsSuccessStatusCode)
                    {
                        JsonRespondResult respondResult = JsonConvert.DeserializeObject <JsonRespondResult>(await httpResponseMessage.Content.ReadAsStringAsync());
                        if (respondResult.Result)
                        {
                            return(respondResult.Message);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                }
                catch (Exception ex)
                {
                    this.OnUpgradeError(new ErrorArgs(ex.Message));
                }
            }
            return(null);
        }
Exemple #4
0
        /// <summary> 新增版本
        /// </summary>
        /// <param name="version">版本号</param>
        public async Task <bool> CreateVersion(JsonReleaseVersion jsonReleaseVersion)
        {
            using (HttpClient client = new HttpClient(new HttpClientHandler()
            {
                UseCookies = false
            }))                                                                                       //若想手动设置Cookie则必须设置UseCookies = false
            {
                StringContent stringContent = new StringContent(JsonConvert.SerializeObject(jsonReleaseVersion));
                stringContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
                try
                {
                    var result = await client.PostAsync(new Uri(this.url + "/createVersion"), stringContent);

                    if (result.IsSuccessStatusCode)
                    {
                        JsonRespondResult respondResult = JsonConvert.DeserializeObject <JsonRespondResult>(await result.Content.ReadAsStringAsync());
                        if (!respondResult.Result)
                        {
                            this.OnUpgradeError(new ErrorArgs(respondResult.Message));
                        }
                        return(respondResult.Result);
                    }
                }
                catch (Exception ex)
                {
                    this.OnUpgradeError(new ErrorArgs(ex.Message));
                    return(false);
                }
            }
            return(true);
        }
 /// <summary> 异步获取下载流
 /// </summary>
 /// <param name="fileName"></param>
 /// <returns></returns>
 public Task <JsonRespondResult> Upload(HttpRequest httpRequest, string uploadDir = null)
 {
     return(Task <JsonRespondResult> .Run(() =>
     {
         try
         {
             List <JsonRespondResult> error = new List <JsonRespondResult>();
             foreach (var formFile in httpRequest.Form.Files)
             {
                 JsonRespondResult respondResult = null;
                 if (formFile.Name == "file")
                 {
                     respondResult = this.UploadOnce(formFile, uploadDir);
                 }
                 else
                 {
                     respondResult = this.UploadChunk(formFile, uploadDir);
                 }
                 if (!respondResult.Result)
                 {
                     error.Add(respondResult);
                 }
             }
             if (error.Count == 0)
             {
                 return new JsonRespondResult()
                 {
                     Message = "上传成功"
                 };
             }
             else
             {
                 return new JsonRespondResult()
                 {
                     Result = false,
                     Message = "上传失败",
                     Details = error.Select(e => e.Message).ToArray()
                 };
             }
         }
         catch (Exception ex)
         {
             return new JsonRespondResult()
             {
                 Result = false,
                 Message = "上传失败" + ex.Message
             };
         }
     }));
 }
Exemple #6
0
        /// <summary>
        /// 上传分块
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="stream"></param>
        /// <param name="filePath"></param>
        /// <param name="chunkName"></param>
        /// <param name="tryCount"></param>
        /// <returns></returns>
        private async Task <bool> UploadChunk(Stream stream, string filePath, string chunkName, long uploaded, long totalLength, string dir, int tryCount = 0)
        {
            bool success = false;
            long loaded  = 0;

            using (HttpClient client = new HttpClient(new HttpClientHandler()
            {
                UseCookies = false
            })
            {
                Timeout = TimeSpan.FromSeconds(10)
            })                                                                                                                                //若想手动设置Cookie则必须设置UseCookies = false
            {
                MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent();
                multipartFormDataContent.Add(new ProgressableStreamContent(
                                                 stream,
                                                 UploadBufferSize, (r, u) =>
                {
                    loaded = uploaded + u;
                    this.OnUploadProgressChanged(new ProgressChangedArgs(r, uploaded + u, totalLength));
                },
                                                 (s) => this.OnUploadSpeedChanged(new SpeedChangedArgs(s))),
                                             chunkName,
                                             Path.GetFileName(filePath));
                try
                {
                    var result = await client.PostAsync(new Uri(this.uploadUrl + "?uploadDir=" + dir), multipartFormDataContent);

                    if (result.IsSuccessStatusCode)
                    {
                        JsonRespondResult respondResult = JsonConvert.DeserializeObject <JsonRespondResult>(await result.Content.ReadAsStringAsync());
                        success = respondResult.Result;
                        if (!respondResult.Result)
                        {
                            this.OnUploadError(new ErrorArgs(respondResult.Message));
                        }
                    }
                }
                catch (Exception ex)
                {
                    this.OnUploadError(new ErrorArgs(ex.Message));
                }
            }
            if (!success && tryCount < 3)
            {
                this.OnUploadProgressChanged(new ProgressChangedArgs((int)(uploaded - loaded), uploaded, totalLength));
                success |= await UploadChunk(stream, filePath, chunkName, uploaded, totalLength, dir, tryCount + 1);
            }
            return(success);
        }
Exemple #7
0
        /// <summary>
        /// 一次性上传
        /// </summary>
        /// <param name="uri"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        private async Task <bool> UploadOnce(string filePath, string dir)
        {
            using (FileStream fileStream = System.IO.File.OpenRead(filePath))
                using (HttpClient client = new HttpClient(new HttpClientHandler()
                {
                    UseCookies = false
                })
                {
                    Timeout = TimeSpan.FromSeconds(10)
                })                                                                                                                           //若想手动设置Cookie则必须设置UseCookies = false
                {
                    MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent();
                    multipartFormDataContent.Add(new ProgressableStreamContent(
                                                     fileStream,
                                                     UploadBufferSize,
                                                     (r, u) => this.OnUploadProgressChanged(new ProgressChangedArgs(r, u, fileStream.Length)),
                                                     (s) => this.OnUploadSpeedChanged(new SpeedChangedArgs(s))),
                                                 "file",
                                                 Path.GetFileName(filePath));
                    try
                    {
                        var result = await client.PostAsync(new Uri(this.uploadUrl + "?uploadDir=" + dir), multipartFormDataContent);

                        if (result.IsSuccessStatusCode)
                        {
                            JsonRespondResult respondResult = JsonConvert.DeserializeObject <JsonRespondResult>(await result.Content.ReadAsStringAsync());
                            if (!respondResult.Result)
                            {
                                this.OnUploadError(new ErrorArgs(respondResult.Message));
                            }
                            return(respondResult.Result);
                        }
                    }
                    catch (Exception ex)
                    {
                        this.OnUploadError(new ErrorArgs(ex.Message));
                    }
                }
            return(false);
        }