コード例 #1
0
        public async Task <DocViewModel> Upload(UploadRequest request)
        {
            var fileData = request.File;
            var document = new Models.Doc
            {
                ContentType      = request.File.ContentType,
                Description      = request.Details,
                OriginalFileName = request.File.FileName,
                FileName         = request.Name,
                SizeInMbs        = request.File.Length,
                CreatedBy        = _httpContextAccessor.GetUser().userId,
                IsPrimary        = request.IsPrimary
            };
            //Save record to db
            var resp = await _repository.CreateAsync(document);

            //create server filename
            var extension = Path.GetExtension(request.File.FileName);
            var filePath  = Path.Combine(DocStore, $"{resp.Id}.{extension}");

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await fileData.CopyToAsync(stream);
            }

            return(_mapper.Map <DocViewModel>(resp));
        }
コード例 #2
0
        private async Task <UploadResponse> SingleUpload(UploadRequest request)
        {
            logger.Info("Using PutObject to upload file");

            if (_configuration.EnforceMd5Upload && request.PutObjectRequest.ContentMD5 == null)
            {
                var inputStream = request.PutObjectRequest.PutObjectBody;
                var contentMd5  = MultipartUtils.CalculateMd5(inputStream);
                if (inputStream.CanSeek)
                {
                    inputStream.Position = 0;
                }
                else
                {
                    throw new NotSupportedException("Stream cannot be seeked, Please re-try with re-readable streams.");
                }
                request.PutObjectRequest.ContentMD5 = contentMd5;
            }

            if (request.OnProgress != null)
            {
                request.PutObjectRequest.PutObjectBody = new ProgressTrackingInputStream(
                    request.PutObjectRequest.PutObjectBody, new ProgressTracker(request.OnProgress, request.PutObjectRequest.PutObjectBody.Length));
            }

            var response = await _osClient.PutObject(request.PutObjectRequest, request.RetryConfiguration).ConfigureAwait(false);

            return(new UploadResponse()
            {
                ETag = response.ETag,
                OpcRequestId = response.OpcRequestId,
                OpcClientRequestId = response.OpcClientRequestId,
                OpcContentMd5 = response.OpcContentMd5
            });
        }
コード例 #3
0
ファイル: FileStorage.cs プロジェクト: zhanggaoxuan/myrtille
        public void UploadFileToUserDocumentsFolder(
            UploadRequest uploadRequest)
        {
            var documentsFolder = AccountHelper.GetUserDocumentsFolder(uploadRequest.UserDomain, uploadRequest.UserName, uploadRequest.UserPassword);

            try
            {
                // replace if already exists
                if (File.Exists(Path.Combine(documentsFolder, uploadRequest.FileName)))
                {
                    File.Delete(Path.Combine(documentsFolder, uploadRequest.FileName));
                }

                var fileStream = File.Create(Path.Combine(documentsFolder, uploadRequest.FileName));

                int bytesRead;
                var buffer = new byte[4096];

                while ((bytesRead = uploadRequest.FileStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    fileStream.Write(buffer, 0, bytesRead);
                }

                fileStream.Close();
                uploadRequest.FileStream.Close();
            }
            catch (Exception exc)
            {
                Trace.TraceError("Failed to upload file {0} to user {1} documents folder {2}, remote session {3} ({4})", uploadRequest.FileName, uploadRequest.UserName, documentsFolder, uploadRequest.RemoteSessionId, exc);
                throw;
            }

            Trace.TraceInformation("Uploaded file {0} to user {1} documents folder {2}, remote session {3}", uploadRequest.FileName, uploadRequest.UserName, documentsFolder, uploadRequest.RemoteSessionId);
        }
コード例 #4
0
        public IEnumerable <UploadResponse> Upload(UploadRequest request)
        {
            var list = new List <UploadResponse>();

            request.Files.ForEach(async file =>
            {
                string contentType = MimeUtility.GetMimeMapping(file.FileName);
                string extension   = Path.GetExtension(file.FileName);

                var content     = ToByteArray(file);
                string subs     = Guid.NewGuid().ToString().Substring(0, 4);
                string fileName = $"{subs}-{request.Ticket}-{file.FileName}";

                var blobClient = new BlobClient(_connectionString, $"{_container}/{request.Ticket}", fileName);

                list.Add(new UploadResponse
                {
                    NomeArquivo = fileName,
                    Url         = blobClient.Uri.AbsoluteUri,
                    ContentType = contentType,
                    Extension   = extension
                });

                using var stream = new MemoryStream(content);
                await blobClient.UploadAsync(stream);
            });

            return(list);
        }
コード例 #5
0
ファイル: HomeController.cs プロジェクト: MrBurak/Friss
        public IActionResult Upload(string upload)
        {
            string filename = Request.Form["filename"];
            var    files    = Request.Form.Files;

            if (files.Count == 0 || filename == "")
            {
                ViewData["Result"] = "Please choose file and give it a name";
                ViewData["Saved"]  = false;
            }
            else
            {
                var           file  = files[0];
                UploadRequest model = new UploadRequest
                {
                    Extension    = Path.GetExtension(file.FileName),
                    Base64String = Utility.ConvertToBase64(file.OpenReadStream()),
                    Name         = filename
                };
                var url    = _configuration.GetSection("ApiSettings:UploadDocument").Value;
                var result = _apiHelper.ApiServicePostRequest <UploadRequest, Result <Document> >(model, url, GetSession().Token);
                if (result != null)
                {
                    ViewData["Result"] = result.ResultMessage;
                    ViewData["Saved"]  = result.ResultStatus;
                }
                else
                {
                    ViewData["Result"] = "Upload failed";
                    ViewData["Saved"]  = false;
                }
            }
            return(Uploader());
        }
コード例 #6
0
        public Result <DocumentInfo> Save(UploadRequest request)
        {
            Result <DocumentInfo> saveresult = new Result <DocumentInfo>();
            var result = _validation.Base64ToStream(request.Base64String);

            if (!result.ResultStatus)
            {
                saveresult.ResultMessage      = result.ResultMessage;
                saveresult.ResultInnerMessage = result.ResultInnerMessage;
                saveresult.ResultCode         = ResultCodes.Validation.GetHashCode();
            }
            Stream stream = result.ResultEntity;

            result = _validation.ValidateFileSize(result.ResultEntity);
            if (!result.ResultStatus)
            {
                saveresult.ResultMessage      = result.ResultMessage;
                saveresult.ResultInnerMessage = result.ResultInnerMessage;
                saveresult.ResultCode         = ResultCodes.Validation.GetHashCode();
                return(saveresult);
            }
            result = _validation.ValidateExtension(result.ResultEntity, request.Extension);
            if (!result.ResultStatus)
            {
                saveresult.ResultMessage      = result.ResultMessage;
                saveresult.ResultInnerMessage = result.ResultInnerMessage;
                saveresult.ResultCode         = ResultCodes.Validation.GetHashCode();
                return(saveresult);
            }
            try
            {
                var file          = Guid.NewGuid().ToString("N") + request.Extension;
                var webrootFolder = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");

                var path = Path.Combine(webrootFolder, localpath, file).ToLower();
                using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
                {
                    stream.CopyTo(fileStream);
                }
                HttpRequest hrequest = _httpContextAccessor.HttpContext.Request;



                saveresult.ResultEntity = new DocumentInfo {
                    FilePath = "http://" + hrequest.Host + "/" + localpath + "/" + file, FileSize = stream.Length.ToString()
                };
                saveresult.ResultStatus  = true;
                saveresult.ResultMessage = "Saved";
                saveresult.ResultCode    = ResultCodes.OK.GetHashCode();
            }
            catch (Exception ex)
            {
                saveresult.ResultEntity       = null;
                saveresult.ResultStatus       = false;
                saveresult.ResultMessage      = "Error";
                saveresult.ResultInnerMessage = ex.ToString();
                saveresult.ResultCode         = ResultCodes.Error.GetHashCode();
            }
            return(saveresult);
        }
コード例 #7
0
        public async Task <IActionResult> Upload(
            string dirPath,
            [FromForm] UploadRequest request,
            [FromServices] IMediator mediator)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            ViewData["DirPath"] = dirPath;
            var directryPath = new FilePath(dirPath ?? "");

            foreach (var file in request.Files)
            {
                using (var stream = file.OpenReadStream())
                {
                    var data = await _storage.CreateAsync(_storage.CreateKey(), stream).ConfigureAwait(false);

                    var filePath = directryPath.Combine(System.IO.Path.GetFileName(file.FileName ?? "NONAME"));
                    var command  = new CreateOrUpdateDocumentCommand
                    {
                        Path        = filePath,
                        Data        = data,
                        ForceCreate = true
                    };
                    var response = await mediator.Send(command).ConfigureAwait(false);
                }
            }
            return(Redirect(Url.ViewFile(directryPath.ToString())));
        }
コード例 #8
0
        public async Task Test_UploadFile()
        {
            // The cancellation token.
            CancellationToken cancellationToken = CancellationToken.None;

            // The content.
            var file = new StringContent("File content");

            // Create the request.
            var request = new UploadRequest(
                file,
                "test",
                filetype: "text",
                initialComment: "This is the initial comment",
                title: "file title"
                );

            // Post a message.
            var response = await Client.Files
                           .UploadAsync(request, cancellationToken)
                           .ConfigureAwait(false);

            // It is ok.
            Assert.True(response.Ok, $"The call to {nameof(Client.Files.UploadAsync)} returned an error: {response.Error}");

            // Assert value equality.
            Assert.Equal(request.Filename, response.File.Name);
            Assert.Equal(request.Title, response.File.Title);
        }
コード例 #9
0
        public async Task <IActionResult> Upload(UploadRequest request)
        {
            if (string.IsNullOrEmpty(request.Title))
            {
                return(BadRequest("Invalid input data!"));
            }

            PostModel post = null;

            if (request.Image != null)
            {
                using (var stream = new MemoryStream())
                {
                    await request.Image.CopyToAsync(stream);

                    var extension = Path.GetExtension(request.Image.FileName);
                    post = await postService.PostImage(request.Title, stream.ToArray(), extension, User.Identity.Name, request.IsNSFW);
                }
            }
            else if (!string.IsNullOrEmpty(request.youTubeLink))
            {
                post = await postService.PostYTVideo(request.Title, request.youTubeLink, User.Identity.Name, request.IsNSFW);
            }
            else
            {
                return(BadRequest());
            }

            eventPublisher.Publish <IPostCreatedEventHandler, PostModel>(post);
            return(RedirectToAction("Index", "Home"));
        }
コード例 #10
0
        public UploadResponse Upload(UploadRequest request)
        {
            var tempFile = Path.GetTempFileName();

            try
            {
                // write data to a temp file
                File.WriteAllBytes(tempFile, request.DataContent);

                // create the new document object, and put the remote file
                var args = new AttachedDocumentCreationArgs
                {
                    MimeType             = request.MimeType,
                    FileExtension        = request.FileExtension,
                    LocalContentFilePath = tempFile
                };

                var document = AttachedDocument.Create(args, AttachmentStore.GetClient());
                PersistenceContext.Lock(document, DirtyState.New);

                PersistenceContext.SynchState();

                var assembler = new AttachedDocumentAssembler();
                return(new UploadResponse(assembler.CreateAttachedDocumentSummary(document)));
            }
            finally
            {
                File.Delete(tempFile);
            }
        }
コード例 #11
0
        // Save photo url
        public async Task <PhotoResponse> SavePhotoUrl(int userId, UploadRequest model)
        {
            var userInDb = await _userService.GetUserWithPhotos(userId);

            if (userInDb.Photos.Count == 9)
            {
                throw new AppException("You cannot have more than 9 photos");
            }

            var photo = _mapper.Map <Photo>(model);

            photo.Order = Convert.ToByte(userInDb.Photos.Count);
            //if (!userInDb.Photos.Any(u => u.IsMain))
            //{
            //    photo.IsMain = true;
            //}

            userInDb.Photos.Add(photo);

            if (await _context.SaveChangesAsync() > 0)
            {
                return(_mapper.Map <PhotoResponse>(photo));
            }

            throw new AppException("Save photo url failed");
        }
コード例 #12
0
        /// <summary>
        /// Start upload file asynchronously
        /// </summary>
        /// <param name="fileContent">FileContent</param>
        /// <param name="chunkSize">ChunkSize</param>
        /// <param name="replaceVideoId">ReplaceVideoId</param>
        /// <returns></returns>
        private async Task <IUploadRequest> StartUploadFileAsync(IBinaryContent fileContent,
                                                                 int chunkSize       = DefaultUploadChunkSize,
                                                                 long?replaceVideoId = null)
        {
            if (!fileContent.Data.CanRead)
            {
                throw new ArgumentException("fileContent should be readable");
            }

            if (fileContent.Data.CanSeek && fileContent.Data.Position > 0)
            {
                fileContent.Data.Position = 0;
            }

            var ticket = replaceVideoId.HasValue
                ? await GetReplaceVideoUploadTicketAsync(replaceVideoId.Value).ConfigureAwait(false)
                : await GetUploadTicketAsync().ConfigureAwait(false);

            var uploadRequest = new UploadRequest
            {
                Ticket    = ticket,
                File      = fileContent,
                ChunkSize = chunkSize
            };

            return(uploadRequest);
        }
コード例 #13
0
        public async Task <ActionResult> UpdateAvatar(UploadRequest request)
        {
            var contactId = request.RefrenceId;

            if (contactId == null || contactId.Value == Guid.Empty)
            {
                throw new ClientFriendlyException($"Invalid contact id: {contactId}");
            }

            var contact = await _contactService.GetByIdAsync(contactId.Value);

            if (contact == null)
            {
                throw new ClientFriendlyException($"Invalid contact id: {contactId}");
            }

            var resp = await _docService.Upload(request);

            var avatar = $"http://localhost:9001/api/docs/download/{resp.Id}";

            contact.Person.Avatar = avatar;
            await _contactService.UpdateAsync(contact);

            return(Ok(new { message = "Upload Successful", avatar }));
        }
コード例 #14
0
        public async Task <IUploadRequest> StartUploadFileAsync(IBinaryContent fileContent,
                                                                int chunkSize       = DEFAULT_UPLOAD_CHUNK_SIZE,
                                                                long?replaceVideoId = null)
        {
            if (!fileContent.Data.CanRead)
            {
                throw new ArgumentException("fileContent should be readable");
            }
            if (fileContent.Data.CanSeek && fileContent.Data.Position > 0)
            {
                fileContent.Data.Position = 0;
            }

            UploadTicket ticket = replaceVideoId.HasValue
                ? await GetReplaceVideoUploadTicketAsync(replaceVideoId.Value)
                : await GetUploadTicketAsync();

            var uploadRequest = new UploadRequest
            {
                Ticket    = ticket,
                File      = fileContent,
                ChunkSize = chunkSize
            };

            VerifyUploadResponse uploadStatus = await ContinueUploadFileAsync(uploadRequest);

            return(uploadRequest);
        }
コード例 #15
0
        public string UploadAsync(UploadRequest request)
        {
            if (request.Data == null)
            {
                return(string.Empty);
            }
            var streamData = new MemoryStream(request.Data);

            if (streamData.Length > 0)
            {
                var  folder     = request.UploadType.ToDescriptionString();
                var  folderName = Path.Combine("Files", folder);
                var  pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName);
                bool exists     = System.IO.Directory.Exists(pathToSave);
                if (!exists)
                {
                    System.IO.Directory.CreateDirectory(pathToSave);
                }
                var fileName = request.FileName.Trim('"');
                var fullPath = Path.Combine(pathToSave, fileName);
                var dbPath   = Path.Combine(folderName, fileName);
                using (var stream = new FileStream(fullPath, FileMode.Create))
                {
                    streamData.CopyTo(stream);
                }
                return(dbPath);
            }
            else
            {
                return(string.Empty);
            }
        }
コード例 #16
0
        /// <inheritdoc />
        public override void SaveRequest(UploadRequest request, bool isCreate)
        {
            // TODO: uncomment, add check to make sure object is the same
            //if (isCreate)
            //{
            try
            {
#if NET35
                _requestsLock.EnterUpgradeableReadLock();
#else
                _requestsLock.AcquireReaderLock(-1);
#endif
                Dictionary <string, UploadRequest> requests;

                if (!_uploadRequests.TryGetValue(request.UploadSessionId, out requests))
                {
                    requests = new Dictionary <string, UploadRequest>();

                    requests[request.UploadRequestId] = request;

#if !NET35
                    // TODO: does this break something?
                    LockCookie cookie = new LockCookie();
#endif

                    try
                    {
#if NET35
                        _requestsLock.EnterWriteLock();
#else
                        cookie = _requestsLock.UpgradeToWriterLock(-1);
#endif

                        _uploadRequests[request.UploadSessionId] = requests;
                    }
                    finally
                    {
#if NET35
                        _requestsLock.ExitWriteLock();
#else
                        _requestsLock.DowngradeFromWriterLock(ref cookie);
#endif
                    }
                }
                else
                {
                    lock (requests)
                        requests[request.UploadRequestId] = request;
                }
            }
            finally
            {
#if NET35
                _requestsLock.ExitUpgradeableReadLock();
#else
                _requestsLock.ReleaseReaderLock();
#endif
            }
            //}
        }
コード例 #17
0
        public UploadResponse Upload(UploadRequest request)
        {
            try
            {
                // open DB client and get DB reference
                var client   = new MongoClient(SysConfig.DBconn);
                var database = client.GetDatabase("da_pp_db");

                // stream the file to GridFS
                var us = new GridFSBucket(database);
                var id = us.UploadFromStream(request.FileName, request.Stream);

                return(new UploadResponse
                {
                    UploadSucceeded = true,
                    Errored = false,
                    Message = "File uploaded"
                });
            }
            catch (Exception ex)
            {
                return(new UploadResponse
                {
                    UploadSucceeded = false,
                    Errored = true,
                    Message = ex.Message
                });
            }
        }
コード例 #18
0
ファイル: UploadController.cs プロジェクト: zenondzk/graphs
        public string Post([FromBody] UploadRequest request)
        {
            string xml;

            try
            {
                var webRequest = WebRequest.Create(request.Url);

                using (var response = webRequest.GetResponse())
                    using (var content = response.GetResponseStream())
                        using (var reader = new StreamReader(content))
                        {
                            xml = reader.ReadToEnd();
                        }

                var service = new XMLGraphParserService(xml);
                if (!service.IsValid() && graphService.Create(service.Graph))
                {
                    return(JsonConvert.SerializeObject(new UploadResponse {
                        Success = false, Errors = service.Errors
                    }, Formatting.Indented));
                }

                return(JsonConvert.SerializeObject(new UploadResponse {
                    Success = true
                }));
            }catch (Exception ex)
            {
                return(JsonConvert.SerializeObject(new UploadResponse {
                    Success = false, Errors = new List <string> {
                        ex.Message
                    }
                }));
            }
        }
コード例 #19
0
        /// <inheritdoc />
        public override UploadRequest GetRequest(string uploadSessionId, string uploadRequestId)
        {
            try
            {
#if NET35
                _requestsLock.EnterReadLock();
#else
                _requestsLock.AcquireReaderLock(-1);
#endif

                Dictionary <string, UploadRequest> requests;
                UploadRequest request = null;

                if (_uploadRequests.TryGetValue(uploadSessionId, out requests))
                {
                    lock (requests)
                    {
                        if (!requests.TryGetValue(uploadRequestId, out request))
                        {
                            request = null;
                        }
                    }
                }

                return(request);
            }
            finally
            {
#if NET35
                _requestsLock.ExitReadLock();
#else
                _requestsLock.ReleaseReaderLock();
#endif
            }
        }
コード例 #20
0
ファイル: Test04.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request) {
            string data = "<script>alert(document.cookie)</script>";

            request.setFileData(Encoding.ASCII.GetBytes(data));
            request.setFileContentType("image/jpeg"); //Default all files to image/jpeg

            //HTML case sensitivity test
            request.setFileName("Test_4" + ".hTMl");
            await request.send();
            printResult(request, "Test 04 (.hTMl)");

            //ASP case sensitivity test
            request.setFileName("Test_4" + ".aSp");
            await request.send();
            printResult(request, "Test 04 (.aSp)");

            //Change contents for php test
            data = "<?php\n"
                 + "  echo phpinfo();\n"
                 + "?>";
            //PHP case sensitivity test
            request.setFileName("Test_4" + ".pHp");
            await request.send();
            printResult(request, "Test 04 (.pHp)");
        }
コード例 #21
0
        public async Task <IActionResult> UploadFile(
            [FromForm] UploadRequest uploadRequest)
        {
            try
            {
                if (uploadRequest.upload == null ||
                    uploadRequest.upload.Length == 0)
                {
                    return(BadRequest("File not selected"));
                }

                var result = await _fileSystemService
                             .UploadFileAsync(
                    new UploadFileState(
                        new NPath(uploadRequest.target),
                        new NPath(uploadRequest.upload_fullpath),
                        uploadRequest.upload.OpenReadStream()
                        ));

                if (result == null)
                {
                    throw new SystemException("Unable to process file upload");
                }

                return(Json(result));
            }
            catch (Exception e)
            {
                return(BadRequest(e));
            }
        }
コード例 #22
0
        public async Task <IUploadRequest> StartUploadFileAsync(IBinaryContent fileContent,
                                                                int chunkSize = DEFAULT_UPLOAD_CHUNK_SIZE)
        {
            if (!fileContent.Data.CanRead)
            {
                throw new ArgumentException("fileContent should be readable");
            }
            if (fileContent.Data.CanSeek && fileContent.Data.Position > 0)
            {
                fileContent.Data.Position = 0;
            }

            UploadTicket ticket = await GetUploadTicketAsync();

            var uploadRequest = new UploadRequest
            {
                Ticket    = ticket,
                File      = fileContent,
                ChunkSize = chunkSize
            };

            VerifyUploadResponse uploadStatus = await ContinueUploadFileAsync(uploadRequest);

            uploadRequest.BytesWritten = uploadStatus.BytesWritten;

            return(uploadRequest);
        }
コード例 #23
0
        public async Task <ActionResult <UploadResult> > Upload([FromQuery] UploadRequest request, [FromForm] IFormFile file)
        {
            var site = await _siteRepository.GetAsync(request.SiteId);

            if (file == null)
            {
                return(this.Error("请选择有效的文件上传"));
            }

            var fileName = Path.GetFileName(file.FileName);

            if (!_pathManager.IsVideoExtensionAllowed(site, PathUtils.GetExtension(fileName)))
            {
                return(this.Error("文件格式不正确,请更换文件上传!"));
            }

            var localDirectoryPath = await _pathManager.GetUploadDirectoryPathAsync(site, UploadType.File);

            var localFileName = PathUtils.GetUploadFileName(fileName, request.IsChangeFileName);
            var filePath      = PathUtils.Combine(localDirectoryPath, localFileName);

            await _pathManager.UploadAsync(file, filePath);

            return(new UploadResult
            {
                Name = localFileName,
                Path = filePath
            });
        }
コード例 #24
0
        public UploadResponse Upload(UploadRequest request)
        {
            try
            {
                DictionaryInfo dictInfo = request.DictInfo;
                using (var db = new DictServiceEntities())
                {
                    var user = db.Users.SingleOrDefault(x => x.Login == dictInfo.SenderLogin);
                    if (user == null)
                    {
                        user.Login = request.DictInfo.SenderLogin;
                        db.Users.Add(user);
                        db.SaveChanges();
                    }
                    //if (!CheckExtension(dictInfo.FileName, ".mdb"))
                    //{
                    //    throw new NotSupportedException();
                    //}
                    if (!CheckPermission(user, dictInfo.Action))
                    {
                        throw new Exception("Нету прав!!!");
                    }
                    switch (dictInfo.Action)
                    {
                    case ActionEnum.AddDict:
                    {
                        AddNewDicionary(request.DictInfo, user, request.Stream);
                        break;
                    }

                    case ActionEnum.EditDict:
                    {
                        RefreshDictionary(request.DictInfo, user, request.Stream);
                        break;
                    }
                    }
                    return(new UploadResponse
                    {
                        UploadSucceeded = true
                    });
                }
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}",
                                               validationError.PropertyName,
                                               validationError.ErrorMessage);
                    }
                }
                return(new UploadResponse
                {
                    UploadSucceeded = false,
                    Error = dbEx.ToString()
                });
            }
        }
コード例 #25
0
        public void UploadObject(UploadRequest request)
        {
            CheckUri(request.Uri);

            try
            {
                var client = cloudStorageAccount.CreateCloudBlobClient();
                client.ParallelOperationThreadCount = 1;

                var container = client.GetContainerReference(containerName);
                if (request.CreateDirectory)
                {
                    container.CreateIfNotExists();
                }

                var blob = container.GetBlockBlobReference(request.Uri.AbsoluteUri);

                if (request.InputStream.Position != 0)
                {
                    request.InputStream.Position = 0;
                }

                blob.UploadFromStream(request.InputStream);
            }
            catch (Exception e)
            {
                throw new StorageException(string.Format("Failed to upload object with request {0}.", request), e);
            }
        }
コード例 #26
0
        public override async Task <UploadResponse> UploadFile(UploadRequest request, ServerCallContext context)
        {
            _logger.LogInformation($"File Received: {request.Name} | Size: {request.Content.Length} ");

            _db.Docs.Add(new Doc
            {
                Content     = request.Content.ToArray(),
                ContentType = request.ContentType,
                PostId      = request.PostId,
                FileName    = request.Name,
                UserId      = request.UserId
            });

            await _db.SaveChangesAsync();

            // Check if it was successful

            var response = new UploadResponse
            {
                Status  = FileUploadStatus.Success,
                Message = $"File upload is done => {request.Name} | " + request.Content.Length
            };

            return(response);
        }
コード例 #27
0
        /// <inheritdoc />
        public override IEnumerable <UploadRequest> GetRequestsForSession(string uploadSessionId)
        {
            List <UploadRequest> requests = new List <UploadRequest>();

            string sql;

            sql = "SELECT " + _statusField + " FROM " + _table + " WHERE " + _sessionIdField + "=" + _sessionIdParameterName + " AND NOT " + _requestIdField + " IS NULL";

            using (IDbConnection cn = CreateConnection(_connectionString))
                using (IDbCommand cmd = cn.CreateCommand())
                {
                    cmd.CommandText = sql;

                    AddParameter(cmd, _sessionIdParameterName, DbType.String, uploadSessionId);

                    cn.Open();

                    using (IDataReader rd = cmd.ExecuteReader(CommandBehavior.SingleResult))
                    {
                        while (rd.Read())
                        {
                            requests.Add(UploadRequest.Deserialize(rd.GetString(0)));
                        }
                    }
                }

            return(requests);
        }
コード例 #28
0
        public UploadBlogsImportFileResponse Execute(UploadImportFileViewModel request)
        {
            var fileId  = Guid.NewGuid();
            var fileUri = importService.ConstructFilePath(fileId);

            using (var stream = new MemoryStream())
            {
                request.FileStream.CopyTo(stream);

                try
                {
                    var upload = new UploadRequest();
                    upload.CreateDirectory     = true;
                    upload.Uri                 = fileUri;
                    upload.InputStream         = request.FileStream;
                    upload.IgnoreAccessControl = true;

                    storageService.UploadObject(upload);
                }
                catch (Exception exc)
                {
                    throw new ValidationException(() => BlogGlobalization.ImportBlogPosts_FailedToSaveFileToStorage_Message,
                                                  "Failed to save blog posts import file to storage.",
                                                  exc);
                }

                stream.Position = 0;
                var blogs   = importService.DeserializeXMLStream(stream);
                var results = importService.ValidateImport(blogs);

                return(new UploadBlogsImportFileResponse {
                    Results = results, FileId = fileId
                });
            }
        }
コード例 #29
0
        public void UploadPartToAmazon(string filename, string awsBucket, UploadRequest uploadRequest, uint chunkNumber, byte[] fileContent, int numberOfBytes, uint numberOfChunks)
        {
            var finalKey = string.Format("{0}/p{1}", uploadRequest.MultipartParams.Key, chunkNumber);

            using (var client = new HttpClient())
            {
                using (var formData = new MultipartFormDataContent())
                {
                    formData.Add(new StringContent(uploadRequest.MultipartParams.AWSAccessKeyid), "x-amz-credential");
                    formData.Add(new StringContent(finalKey), "key");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.Policy), "Policy");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.Signature), "X-Amz-Signature");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.Acl), "acl");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.Algorithm), "x-amz-algorithm");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.Date), "x-amz-date");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.SuccessActionStatus), "success_action_status");
                    formData.Add(new StringContent(uploadRequest.MultipartParams.ContentType), "Content-Type");
                    formData.Add(new StringContent(filename), "name");
                    formData.Add(new StringContent(chunkNumber.ToString()), "chunk");
                    formData.Add(new StringContent(numberOfChunks.ToString()), "chunks");
                    formData.Add(new StringContent(finalKey), "Filename");
                    formData.Add(new ByteArrayContent(fileContent, 0, numberOfBytes), "file");

                    var task = new Task(() =>
                    {
                        using (var response = client.PostAsync(awsBucket, formData))
                        {
                            response.Result.EnsureSuccessStatusCode();
                        }
                    });
                    task.Start();
                    Task.WaitAll(task);
                }
            }
        }
コード例 #30
0
ファイル: DocumentController.cs プロジェクト: MrBurak/Friss
        public async Task <IActionResult> Post([FromBody] UploadRequest request)
        {
            string authHeader = this.HttpContext.Request.Headers["Authorization"];
            string token      = authHeader.Substring("bearer ".Length).Trim();
            var    userresult = _repository.GetUserByToken(token);

            if (!userresult.ResultStatus)
            {
                return(Unauthorized());
            }
            if (userresult.ResultEntity.refUserRole != 1)
            {
                return(Unauthorized());
            }

            var result = _saver.Save(request);

            if (!result.ResultStatus)
            {
                return(Ok(await Task.Run(() => result)));
            }
            return(Ok(await Task.Run(() => _repositoryDocument.Insert(new Document
            {
                CreatedUserId = userresult.ResultEntity.Id,
                CreatedDate = DateTime.UtcNow,
                FilePath = result.ResultEntity.FilePath,
                FileSize = result.ResultEntity.FileSize,
                Name = request.Name
            }))));
        }
コード例 #31
0
        public override Task <UploadReply> Upload(UploadRequest request, ServerCallContext context)
        {
            UploadReply result = new UploadReply();

            try
            {
                Stream       imageStream   = new MemoryStream(request.File.ToByteArray());
                Image        originalImage = Image.FromStream(imageStream);
                List <Image> images        = ImageFactory.CreateNewSizeImages(originalImage);

                SaveModel saveModel = new SaveModel()
                {
                    Directory     = request.Directory,
                    FileName      = request.FileName,
                    Images        = images,
                    OriginalImage = originalImage
                };

                var saveList = imageCollectionSaver.Save(saveModel);

                result.UploadPath = "upload/" + request.Directory + request.FileName;
            }
            catch (Exception ex)
            {
                result = new UploadReply()
                {
                    ErrorMessage = ex.Message, HasError = true
                };
            }

            return(Task.FromResult(result));
        }
コード例 #32
0
ファイル: ProgressHandler.cs プロジェクト: codingbat/BandCamp
        internal static void RenderProgress(HttpContext context, UploadRequest request)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append('{');

            if (request != null)
            {
                JsonHelper.AppendJson(sb, "uploadRequestId", request.UploadRequestId);
                JsonHelper.AppendJson(sb, "uploadSessionId", request.UploadSessionId);
                JsonHelper.AppendJson(sb, "position", request.Position);
                JsonHelper.AppendJson(sb, "contentLength", request.ContentLength);
                JsonHelper.AppendJson(sb, "errorType", request.ErrorType.ToString());
                if (request.Error != null)
                    JsonHelper.AppendJson(sb, "errorMessage", request.Error.Message);
                JsonHelper.AppendJson(sb, "status", request.State.ToString());
                
                if (request.UploadedFiles.Count > 1)
                    sb.Append(", files: [");

                foreach (UploadedFile file in request.UploadedFiles)
                {
                    StringBuilder fileSb;

                    if (request.UploadedFiles.Count > 1)
                    {
                        fileSb = new StringBuilder();

                        fileSb.Append('{');
                    }
                    else
                    {
                        fileSb = sb;
                    }

                    JsonHelper.AppendJson(fileSb, "name", file.ClientName);
                    JsonHelper.AppendJson(fileSb, "fileSelectorId", file.FileSelectorId);
                    JsonHelper.AppendJson(fileSb, "sourceElement", file.SourceElement);

                    foreach (KeyValuePair<string, string> pair in file.Data)
                        JsonHelper.AppendJson(fileSb, pair.Key, pair.Value);

                    if (request.UploadedFiles.Count > 1)
                    {
                        fileSb.Append('}');

                        sb.Append(fileSb.ToString());
                    }
                }

                if (request.UploadedFiles.Count > 1)
                    sb.Append(']');
            }

            sb.Append('}');

            WriteResponse(context, sb.ToString(), request != null ? request.UploadProfile : null);
        }
        private static ValidationResponse Validate(UploadRequest uploadRequest)
        {
            var validationResponse = ValidationResponse.Success;
            var postedFile = uploadRequest.PostedFile;
            if (!ValidateEmpty(postedFile)) validationResponse = ValidationResponse.Empty;
            else if (!ValidateSize(postedFile, uploadRequest.MaxSize)) validationResponse = ValidationResponse.MaxSizeExceeded;
            else if (!ValidateType(postedFile.InputStream)) validationResponse = ValidationResponse.InvalidFileType;

            return validationResponse;
        }
コード例 #34
0
        public MimeUploadHandler(UploadHttpRequest httpRequest, UploadRequest request)
        {
            //Current = this;

            _httpRequest = httpRequest;
            _request = request;

            _boundary = ExtractBoundary(_httpRequest.ContentType, _httpRequest.ContentEncoding);

            _requestStream = new RequestStream(_httpRequest.Worker);
        }
コード例 #35
0
ファイル: Test02.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request) {
            const string data = "<?php\n"
                              + "  echo phpinfo();\n"
                              + "?>";

            request.setFileData(Encoding.ASCII.GetBytes(data));
            request.setFileContentType("image/jpeg");
            request.setFileName("Test_2.php");

            await request.send();
            printResult(request, "Test 02");
        }
コード例 #36
0
ファイル: Test03.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request){
            //Set the data to HTML (all formats support HTML)
            const string data = "<script>alert(document.cookie)</script>";
            string[] badExtensions = {".html", ".shtml", ".jsp", ".asp", ".phtml", ".php3", ".php4", ".php5" };
            request.setFileContentType("image/jpeg"); //Default all files to image/jpeg

            request.setFileData(Encoding.ASCII.GetBytes(data));

            foreach (string t in badExtensions){
                request.setFileName("Test_3" + t);
                await request.send();
                printResult(request, "Test 03 (" + t + ")");
            }
        }
コード例 #37
0
        public string GetUploadSasUrl(UploadRequest request)
        {

            string imageUri = string.Empty;

            // Set the URI for the Blob Storage service.
            Uri blobEndpoint = new Uri(string.Format("https://{0}.blob.core.windows.net", AppSettings.StorageAccountName));

            // Create the BLOB service client.
            CloudBlobClient blobClient = new CloudBlobClient(blobEndpoint, storageCred);

            if (request.ContainerName != null)
            {
                // Set the BLOB store container name on the item, which must be lowercase.
                request.ContainerName = request.ContainerName.ToLower();

                // Create a container, if it doesn't already exist.
                CloudBlobContainer container = blobClient.GetContainerReference(request.ContainerName);
                container.CreateIfNotExistsAsync();

                // Create a shared access permission policy. 
                BlobContainerPermissions containerPermissions = new BlobContainerPermissions();

                // Enable anonymous read access to BLOBs.
                containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;
                container.SetPermissions(containerPermissions);

                // Define a policy that gives write access to the container for 5 minutes.                                   
                SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy()
                {
                    SharedAccessStartTime = DateTime.UtcNow,
                    SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5),
                    Permissions = SharedAccessBlobPermissions.Write
                };

                // Get the SAS as a string.
                var sasQueryString = container.GetSharedAccessSignature(sasPolicy);

                // Set the URL used to store the image.
                imageUri = string.Format("{0}{1}/{2}{3}", blobEndpoint.ToString(),
                   request.ContainerName, request.FileName, sasQueryString);
            }

            // Complete the insert operation.

            return imageUri;
        }
コード例 #38
0
ファイル: Test12.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request) {
            //Upload a normal jpg
            byte[] data = getFirstImage();
            request.setFileContentType("image/jpeg");

            request.setFileData(data);
            request.setFileName("UniqueLongName.jpg");
            await request.send();
            printResult(request, "Test 12 (Short-name prep)");

            //Upload a jpg with the shortname matching the shortname version of the previous file
            data = getSecondImage();
            request.setFileData(data);
            request.setFileName("Unique~1.jpg");
            await request.send();
            printResult(request, "Test 12 (Short-name overwrite)");
        }
コード例 #39
0
ファイル: Test07.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request){
            byte[] data = getImage();

            request.setFileData(data);
            request.setFileContentType("image/jpeg");

            request.setFileName("Test_7.jpg.php"); //Default extension that will work
            await request.send();
            printResult(request, "Test 07 (malicious image .jpg.php)");

            request.setFileName("Test_7.php.abc1"); //Will only work in certain conditions
            await request.send();
            printResult(request, "Test 07 (malicious image .php.abc1)");

            request.setFileName("Test_7.php.jpg"); //Will only work in certain conditions
            await request.send();
            printResult(request, "Test 07 (malicious image .php.jpg)");
        }
        public UploadResponse Upload(UploadRequest uploadRequest)
        {
            var validationResponse = Validate(uploadRequest);

            string webUrl = null;

            if (validationResponse == ValidationResponse.Success)
            {
                var postedFile = uploadRequest.PostedFile;
                var relativeFolderPath = uploadRequest.RelativeFolderPath;
                var fileName = string.Format("{0}{1}", Guid.NewGuid(), Path.GetExtension(postedFile.FileName));
                var savePath = string.Format("{0}{1}", HttpContext.Current.Server.MapPath(relativeFolderPath), fileName);
                postedFile.SaveAs(savePath);
                webUrl = string.Format("{0}{1}", relativeFolderPath, fileName);
            }

            return new UploadResponse(validationResponse, webUrl);
        }
コード例 #41
0
ファイル: Test08.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request){
            //Send a new .htaccess file. If this is uploaded it will make the server execute jpgs as php files
            string data = "AddType application/x-httpd-php .jpg";

            request.setFileData(Encoding.ASCII.GetBytes(data));
            request.setFileContentType("image/jpeg");
            request.setFileName(".htaccess");

            await request.send();
            printResult(request, "Test 08 (.htaccess over/write)");

            //Upload a valid jpg with php in it's comment section
            request.setFileData(getImage());
            request.setFileContentType("image/jpeg");
            request.setFileName("Test_8.jpg");

            await request.send();
            printResult(request, "Test 08 (php w/ .jpg)");
        }
コード例 #42
0
ファイル: Test06.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request) {
            const string data = "<?php\n"
                            + "  echo phpinfo();\n"
                            + "?>";

            request.setFileData(Encoding.ASCII.GetBytes(data));
            request.setFileContentType("image/jpeg");

            //Test for validation of just the final extension (Apache will use the real extension for the MIME type)
            request.setFileName("Test_6.php.123");
            await request.send();
            printResult(request, "Test 06 (first extension)");

            //Test for validation of just the first extension (Apache will use the last extension for the MIME type if they're all real)
            request.setFileName("Test_6.jpg.php");
            await request.send();
            printResult(request, "Test 06 (last extension)");

            //Test for "AddHandler" directive for php files (This will make Apache recognize the file as PHP no matter where the extension is)
            request.setFileName("Test_6.php.jpg");
            await request.send();
            printResult(request, "Test 06 (AddHandler test)");
        }
コード例 #43
0
ファイル: Test05.cs プロジェクト: coj337/Upsploit
        internal override async Task runTest(UploadRequest.UploadRequest request) {
            const string data = "<?php\n"
                              + "  echo phpinfo();\n"
                              + "?>";

            request.setFileData(Encoding.ASCII.GetBytes(data));
            request.setFileContentType("image/jpeg");

            //Dot test
            request.setFileName("Test_5.php.");
            await request.send();
            printResult(request, "Test 05 (dot test)");

            //Space test
            request.setFileName("Test_5.php ");
            await request.send();
            printResult(request, "Test 05 (space test)");

            //Mixed test
            request.setFileName("Test_5.php… … . . .. .. ");
            await request.send();
            printResult(request, "Test 05 (mixed dot/space test)");
        }
コード例 #44
0
 /// <inheritdoc />
 public abstract void SaveRequest(UploadRequest request, bool isCreate);
コード例 #45
0
ファイル: SessionHandler.cs プロジェクト: codingbat/BandCamp
        static void SaveRequest(HttpSessionState state, UploadRequest request)
        {
            Dictionary<string, string> saveRequests = GetSessionRequestsList(state, request.UploadSessionId, true);

            saveRequests[request.UploadRequestId] = GetSerializedString(request);

        }
コード例 #46
0
ファイル: ProgressHandler.cs プロジェクト: codingbat/BandCamp
        /// <inheritdoc />
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                string uploadRequestId = context.Request.QueryString["uploadRequestId"];
                string uploadSessionId = context.Request.QueryString["uploadSessionId"];

                //if (string.IsNullOrEmpty(uploadRequestId))
                //    throw new HttpException(500, "uploadRequestId parameter is required.");

                if (string.IsNullOrEmpty(uploadSessionId))
                    throw new HttpException(500, "uploadSessionId parameter is required.");

                if (!string.IsNullOrEmpty(uploadRequestId))
                {
                    UploadRequest request = SlickUploadContext.SessionStorageProvider.GetRequest(uploadSessionId, uploadRequestId);

                    if (request == null && string.Equals(context.Request.QueryString["isLastRetry"], "true", StringComparison.InvariantCultureIgnoreCase))
                    {
                        string uploadProfile = context.Request.QueryString["uploadProfile"];
                        UploadSession session = SlickUploadContext.SessionStorageProvider.GetSession(uploadSessionId);

                        if (session == null)
                        {
                            session = new UploadSession(uploadSessionId, uploadProfile);

                            session.State = UploadState.Uploading;

                            SlickUploadContext.SessionStorageProvider.SaveSession(session, true);
                        }

                        request = new UploadRequest(uploadSessionId, uploadRequestId, -1, uploadProfile);

                        request.State = UploadState.Error;
                        request.ErrorType = UploadErrorType.RequestNotRecieved;

                        //request._uploadedFilesInternal.Add(new UploadedFile(context.Request.QueryString["name"], null, null, request, null));

                        SlickUploadContext.SessionStorageProvider.SaveRequest(request, true);
                    }

                    RenderProgress(context, request);
                }
                else
                    RenderProgress(context, SlickUploadContext.SessionStorageProvider.GetSession(uploadSessionId));
            }
            catch (Exception ex)
            {
                UploadProfileElement profileElement = SlickUploadContext.Config.UploadProfiles.GetUploadProfileElement(context.Request.QueryString["uploadProfile"], false);

                StringBuilder sb = new StringBuilder();

                sb.Append('{');

                JsonHelper.AppendJson(sb, "progressException", ex.ToString());

                sb.Append('}');

                WriteResponse(context, sb.ToString(), profileElement);
            }
        }
コード例 #47
0
        /// <inheritdoc />
        public override void SaveRequest(UploadRequest request, bool isCreate)
        {
            CallHandler("SaveRequest", request);

            RegisterCleanupSessionIfStaleTimeout(request.UploadSessionId);
        }
コード例 #48
0
ファイル: FTPManager.cs プロジェクト: greeduomacro/hubroot
        /// <summary>
        /// Uploads the specified file to the shard website
        /// </summary>
        /// <param name="fileName">the absolute or relative path of the file to be uploaded</param>
        /// <param name="uploadPath">the relative path on the web server to upload the file to</param>
        /// <param name="asciiFormat">if true, upload in ASCII format; if false, upload in binary format</param>
        /// <param name="deleteAfterUpload">if true, deletes the given file after uploading</param>
        public void UploadFile( string fileName, string uploadPath, bool asciiFormat, bool deleteAfterUpload )
        {
            if( !CollectRegistrySettings(out _ftpHost, out _ftpUsername, out _ftpPassword) )
            {
                ExceptionManager.LogException("FTPManager", new Exception("Unable to collect the necessary registry settings to upload " + fileName));
            }
            else if( !File.Exists(fileName) )
            {
                ExceptionManager.LogException("FTPManager", new FileNotFoundException("The specified file was not found.", fileName));
            }
            else
            {
                _currentRequest = new UploadRequest(fileName, uploadPath, asciiFormat, deleteAfterUpload);
                _instructionFile = DateTime.Now.Ticks.ToString() + ".ftp";

                if( _processLocked || File.Exists(_instructionFile) )
                    _requestQueue.Enqueue(_currentRequest);
                else
                {
                    try
                    {
                        using( StreamWriter writer = new StreamWriter(_instructionFile) )
                        {
                            writer.AutoFlush = true;

                            writer.WriteLine("open {0}", _ftpHost);
                            writer.WriteLine(_ftpUsername);
                            writer.WriteLine(_ftpPassword);
                            writer.WriteLine("cd {0}", _currentRequest.UploadPath);
                            writer.WriteLine(_currentRequest.ASCIIFormat ? "ascii" : "binary");
                            writer.WriteLine("put \"{0}\"", _currentRequest.FileName);
                            writer.WriteLine("close");
                            writer.Write("quit");

                            writer.Close();
                        }

                        _timeoutDelay = (IsArchivePackage(fileName) ? 180 : 60);

                        _ftpProc = new Process();
                        _ftpProc.EnableRaisingEvents = true;
                        _ftpProc.Exited += new EventHandler(delegate( object sender, EventArgs args ) { CleanUp(); });
                        _ftpProc.StartInfo = new ProcessStartInfo("ftp", String.Format("-v -i -s:\"{0}\"", _instructionFile));
                        _ftpProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

                        _processLocked = true;
                        _ftpProc.Start();

                        int elapsedTime = 0;
                        while( _processLocked )
                        {
                            elapsedTime += 100;

                            if( elapsedTime >= (_timeoutDelay * 1000) )
                            {
                                CleanUp();
                                break;
                            }

                            Thread.Sleep(100);
                        }
                    }
                    catch( IOException ioe )
                    {
                        ExceptionManager.LogException("FTPManager.UploadFile(): Unable to upload file \"" + fileName + "\":\n", ioe);
                        CleanUp();
                    }
                    catch( Exception e )
                    {
                        ExceptionManager.LogException("FTPManager.UploadFile(): Unable to upload file \"" + fileName + "\":\n", e);
                        CleanUp();
                    }
                }
            }
        }
コード例 #49
0
        void context_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;

            //System.Diagnostics.Debug.WriteLine(context.Request.Url.ToString() + " - " + (context.Request.Cookies.Count > 0 ? context.Request.Cookies[0].Value : "null"));

            if (IsUploadRequest(context.Request))
            {
                if (context.Trace != null && context.Trace.IsEnabled)
                    throw new HttpException("Trace must be disabled for SlickUpload to intercept upload requests.");

                if ((DateTime.Now - _lastCleanupDate).TotalSeconds > SlickUploadContext.Config.SessionStorageProvider.StaleTimeout)
                {
                    lock (_cleanupThreadLock)
                    {
                        if ((DateTime.Now - _lastCleanupDate).TotalSeconds > SlickUploadContext.Config.SessionStorageProvider.StaleTimeout)
                        {
                            _lastCleanupDate = DateTime.Now;

                            Thread cleanupThread = new Thread(CleanupThread);

                            cleanupThread.Start();
                        }
                    }
                }

                string uploadSessionId = context.Request.QueryString["uploadSessionId"];

                // Generate an uploadSessionId if none was specified
                if (string.IsNullOrEmpty(uploadSessionId))
                    uploadSessionId = Guid.NewGuid().ToString();

                UploadSession session = SlickUploadContext.SessionStorageProvider.GetSession(uploadSessionId);

                if (session == null)
                {
                    session = new UploadSession(uploadSessionId, context.Request.QueryString["uploadProfile"]);

                    session.State = UploadState.Uploading;

                    SlickUploadContext.SessionStorageProvider.SaveSession(session, true);
                }

                SlickUploadContext.CurrentUploadSessionInternal = session;

                string uploadRequestId = context.Request.QueryString["uploadRequestId"];

                // Generate an uploadRequestId if none was specified
                if (string.IsNullOrEmpty(uploadRequestId))
                    uploadRequestId = Guid.NewGuid().ToString();

                UploadHttpRequest httpRequest = new UploadHttpRequest(context);
                UploadRequest request = new UploadRequest(uploadSessionId, uploadRequestId, httpRequest.ContentLength, context.Request.QueryString["uploadProfile"]);

                bool isCalculateSize = (context.Request.QueryString["handlerType"] == "calculatesize");

                try
                {
                    SlickUploadContext.CurrentUploadRequest = request;

                    if (httpRequest.ContentLength > request.UploadProfile.MaxRequestLengthBytes || (httpRequest.ContentLength < 0 && request.UploadProfile.MaxRequestLength > 2097152))
                    {
                        //SimpleLogger.Log("Request too big... aborting");

                        request.ErrorType = UploadErrorType.MaxRequestLengthExceeded;

                        context.ApplicationInstance.CompleteRequest();
                    }

                    if (request.ErrorType == UploadErrorType.None && !(request.UploadFilter == null || request.UploadFilter.ShouldHandleRequest(httpRequest)))
                    {
                        request.ErrorType = UploadErrorType.UploadFilter;
                    }

                    if (request.ErrorType != UploadErrorType.None)
                        request.State = UploadState.Error;
                    else if (isCalculateSize)
                        request.State = UploadState.Initializing;
                    else
                        request.State = UploadState.Uploading;
                }
                catch (Exception ex)
                {
                    request.State = UploadState.Error;
                    request.ErrorType = UploadErrorType.Other;
                    request.Error = ex;

                    throw;
                }
                finally
                {
                    bool hasExistingRequest = false;

                    try
                    {
                        hasExistingRequest = (SlickUploadContext.SessionStorageProvider.GetRequest(uploadSessionId, request.UploadRequestId) != null);
                    }
                    catch
                    { }

                    if (!hasExistingRequest)
                        SlickUploadContext.InsertRequest(request);
                    else
                        SlickUploadContext.UpdateRequest(request, true);
                }

                if (request.ErrorType == UploadErrorType.None)
                {
                    if (isCalculateSize)
                    {
                        httpRequest.Worker.CloseConnection();
                        context.ApplicationInstance.CompleteRequest();

                        return;
                    }

                    context.Server.ScriptTimeout = request.UploadProfile.ExecutionTimeout;

                    MimeUploadHandler handler = null;

                    try
                    {
                        handler = new MimeUploadHandler(httpRequest, request);

                        handler.ProcessRequest();

                        // TODO: should we check the session's state here, and cancel?
                        // TODO: maybe no, because MimeUploadHandler checks on part end and throws cancelled if it should
                        request.State = UploadState.Complete;
                    }
                    catch (Exception ex)
                    {
                        if (handler != null)
                        {
                            try
                            {
                                handler.CancelParse();
                            }
                            catch
                            {
                                // TODO: what do we do with this exception?
                            }
                        }

                        request.State = UploadState.Error;

                        if (ex is UploadDisconnectedException)
                        {
                            request.ErrorType = UploadErrorType.Disconnected;
                        }
                        else if (ex is UploadCancelledException)
                        {
                            request.ErrorType = UploadErrorType.Cancelled;
                        }
                        else
                        {
                            request.ErrorType = UploadErrorType.Other;

                            request.Error = ex;
                        }

                        try
                        {
                            SlickUploadContext.CleanupRequest(request);
                        }
                        catch
                        {
                            // TODO: what do we do with this exception?
                        }

                        // If we were disconnected, let everything pass through. Otherwise, rethrow it.
                        if (ex is UploadDisconnectedException || ex is UploadCancelledException)
                        {
                            httpRequest.Worker.CloseConnection();
                            context.ApplicationInstance.CompleteRequest();
                        }
                        else
                            throw;
                    }
                    finally
                    {
                        SlickUploadContext.UpdateRequest(request, true);
                    }
                }
            }
        }
コード例 #50
0
 /// <inheritdoc />
 public override void SaveRequest(UploadRequest request, bool isCreate)
 {
     InsertOrUpdate(request.UploadSessionId, request.UploadRequestId, request.Serialize(), DateTime.Now, isCreate);
 }
コード例 #51
0
        public void LoadLocalDocument(FileInfo file)
        {
            try {
                var uri = new Uri(HtmlPage.Document.DocumentUri, "ConvertToXps.ashx");
                var request = (HttpWebRequest)WebRequest.Create(uri);
                var uploadRequest = new UploadRequest() {
                    FileName = file.Name,
                    FileStream = file.OpenRead(),
                    Request = request
                };
                request.Method = "POST";
                request.BeginGetRequestStream(OnGetRequestStream, uploadRequest);

                ClearDocument();
                this.loading.Visibility = Visibility.Visible;
                this.status.Text = "Sending document...Please Wait";
                this.title.Text = uploadRequest.FileName;
            }
            catch (Exception ex) {
                ErrorWindow.ShowError(ex);
                this.loading.Visibility = Visibility.Collapsed;
            }
        }
コード例 #52
0
 /// <inheritdoc />
 public override void SaveRequest(UploadRequest request, bool isCreate)
 {
     _provider.SaveRequest(request, isCreate);
 }