Exemplo n.º 1
0
        private EResourceInfo GenerateResource(UploadRes uploadRes, string ossPath)
        {
            var res = GenerateResource(uploadRes);

            res.OssPath = ossPath;
            return(res);
        }
Exemplo n.º 2
0
        private EResourceInfo GenerateResource(UploadRes uploadRes)
        {
            uploadRes.owner = this.getUserId();
            EResourceInfo resourceInfo = new EResourceInfo
            {
                Owner    = uploadRes.owner,
                RefCode  = uploadRes.refCode,
                Remark   = uploadRes.remark,
                ResType  = uploadRes.resType,
                Url      = uploadRes.outerUrl,
                FileType = uploadRes.fileType,
            };

            if (uploadRes.isReset)
            {
                resourceInfo.Code = uploadRes.resCode;
            }
            else
            {
                resourceInfo.Code = CodeManager.ResCode(
                    resourceInfo.FileType,
                    (int)resourceInfo.ResType,
                    resourceInfo.RefCode,
                    resourceInfo.Owner);
            }
            return(resourceInfo);
        }
        /// <summary>
        /// 根据相对路径获取上传文件信息
        /// </summary>
        /// <param name="virPath"></param>
        /// <param name="root"></param>
        /// <returns></returns>
        public static UploadFileInfo GetUploadFileInfo(string virPath, string root = null)
        {
            if (string.IsNullOrWhiteSpace(root))
            {
                root = Root;
            }

            // 文件信息
            var file = new UploadRes {
                VirPath = virPath
            };

            file.OrgFileName = Path.GetFileName(virPath);
            file.PhyPath     = ComHelper.GetPhyPath(root, virPath);
            file.AbsPath     = ComHelper.GetAbsPath(virPath);

            return(new UploadFileInfo
            {
                name = file.OrgFileName,
                response = new UploadFileResp
                {
                    IsSucc = true,
                    Data = new List <UploadRes> {
                        file
                    }
                }
            });
        }
Exemplo n.º 4
0
        private UploadRes RequestToUploadRes()
        {
            ResType resType = ResType.BookOss;

            if (!string.IsNullOrEmpty(Request.Form["resType"]))
            {
                resType = Enum.Parse <ResType>(Request.Form["resType"]);
            }
            UploadRes uploadRes = new UploadRes
            {
                resType  = resType,
                fileType = Request.Form["fileType"],
                refCode  = Convert.ToString(Request.Form["refCode"]),
                owner    = getUserId(),
                outerUrl = Convert.ToString(Request.Form["outerUrl"]),
                remark   = Convert.ToString(Request.Form["remark"]),
                isReset  = Convert.ToBoolean(Request.Form["isReset"]),
            };

            if (uploadRes.isReset)
            {
                uploadRes.resCode = Convert.ToString(Request.Form["resCode"]);
            }
            return(uploadRes);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 校验上传的资源
        /// </summary>
        /// <returns></returns>
        private string VerifyUpload(UploadRes uploadRes)
        {
            //校验用户
            var userId = base.getUserId();

            if (string.IsNullOrEmpty(userId))
            {
                return("没有获取用户信息,请重新登陆");
            }
            if (string.IsNullOrEmpty(uploadRes.refCode))
            {
                return("没有对应的资源Code");
            }
            if (Request.HasFormContentType && string.IsNullOrEmpty(Request.Form["resType"]))
            {
                return("没有对应的资源类型");
            }
            if (string.IsNullOrEmpty(uploadRes.fileType))
            {
                return("没有对应的文件类型");
            }

            if (uploadRes.resType == ResType.Book_Url)
            {
                var url = uploadRes.outerUrl.ToLower();
                if (string.IsNullOrEmpty(uploadRes.outerUrl))
                {
                    return("资源缺少Url");
                }
                if (!VerifyUtil.VerifyUrl(url))
                {
                    return("不是有效的http/https Url");
                }
                if (!VerifyUtil.VerifyHttp(url))
                {
                    return("url地址无法访问,请检查是否已失效");
                }
            }
            if (!uploadRes.isReset)
            {
                if (_resourceServices.IsRepeatRes(userId, uploadRes.refCode, uploadRes.resType, uploadRes.fileType))
                {
                    return(uploadRes.resType == ResType.BookOss ? "此书已上传同类型文件,请查看页面下方列表" :
                           $"已上传[{uploadRes.fileType}]文件类型的外部资源,请查看页面下方列表");
                }
            }
            else
            {
                if (string.IsNullOrEmpty(uploadRes.resCode))
                {
                    return("没有找到重传的资源");
                }
            }

            return(null);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 获取上传的文件路径
        /// </summary>
        /// <param name="upRoot"></param>
        /// <param name="orgFileName"></param>
        /// <returns></returns>
        private UploadRes GetFilePath(UploadRes upRoot, string orgFileName)
        {
            var fileName = GetFilePathByExt(orgFileName);

            var virPath = Path.Combine(upRoot.VirPath, fileName);
            var absPath = Path.Combine(upRoot.AbsPath, fileName);
            var phyPath = Path.Combine(upRoot.PhyPath, fileName);

            return(new UploadRes {
                OrgFileName = orgFileName, VirPath = virPath, AbsPath = absPath, PhyPath = phyPath
            });
        }
Exemplo n.º 7
0
        public ResultEntity <EResourceInfo> SaveResourceInfo(UploadRes uploadRes)
        {
            ResultEntity <EResourceInfo> result = new ResultEntity <EResourceInfo>();

            try
            {
                var verifyMsg = VerifyUpload(uploadRes);
                if (verifyMsg != null)
                {
                    result.ErrorMsg = verifyMsg;
                    return(result);
                }
                result = _resourceServices.saveResToDb(GenerateResource(uploadRes));
            }
            catch (Exception ex)
            {
                result.ErrorMsg = ex.Message;
            }
            return(result);
        }
        /// <summary>
        /// Upload File
        /// </summary>
        /// <param name="fileFullName">file path</param>
        private UploadRes UploadFile(string token, string fileFullName, bool isNew)
        {
            UploadRes uploadRes = null;

            try
            {
                log.Info($"UploadFile access_token: {token}, file path: {fileFullName}");

                // Upload file
                IEASAPIHelper eASHelper = new EASAPIHelper();
                uploadRes = eASHelper.FileSingleUpload(fileFullName, isNew, token);

                log.Info($"UploadFile End");
            }
            catch (Exception ex)
            {
                log.Info($"UploadFile  Exception: {ex.Message}");
            }
            return(uploadRes);
        }
Exemplo n.º 9
0
        public UploadRes SingleUpload(SingleUploadReq uploadReq, DefaultApi apiInstance)
        {
            // 调用 osbeginupload API
            FileInfo fi = new FileInfo(uploadReq.FilePath);

            uploadReq.Length = fi.Length;
            uploadReq.Name   = fi.Name;
            FileOsbeginuploadReq osbeginuploadBody = new FileOsbeginuploadReq();

            osbeginuploadBody = uploadReq;

            FileOsbeginuploadRes osbeginuploadResult = apiInstance.FileOsbeginuploadPost(osbeginuploadBody);

            // 根据服务器返回的对象存储请求,向对象存储上传数据
            byte[]        body            = CommonUtil.FileToBytes(uploadReq.FilePath);
            List <String> headers         = new List <String>();
            List <String> authRequestList = osbeginuploadResult.Authrequest;

            for (int i = 2; i < authRequestList.Count; ++i)
            {
                String header = authRequestList[i];
                headers.Add(header);
            }
            var res = ossHttpHelper.SendReqToOSS(authRequestList[0], authRequestList[1], headers, body);

            // 调用osendupload API
            FileOsenduploadReq osenduploadBody = new FileOsenduploadReq();

            osenduploadBody.Docid = osbeginuploadResult.Docid;
            osenduploadBody.Rev   = osbeginuploadResult.Rev;
            FileOsenduploadRes osenduploadResult = apiInstance.FileOsenduploadPost(osenduploadBody);

            UploadRes uploadRes = new UploadRes();

            uploadRes.DocId = osbeginuploadResult.Docid;
            uploadRes.Rev   = osbeginuploadResult.Rev;
            return(uploadRes);
        }
        /// <summary>
        /// 图片上传
        /// </summary>
        /// <returns></returns>
        //[ApiAuthorizeFilterAttribute(AuthorityIdentity = M.Public.Services.Constants.AuthorityIdentityEnum.Administrator)]
        public UploadRes Image()
        {
            var uploadRes = new UploadRes()
            {
                uid    = StringHelper.GetUUID().ToString(),
                name   = string.Empty,
                status = "success",
                url    = string.Empty,
                errmsg = string.Empty
            };

            try
            {
                if (!base.IsAdministrator)
                {
                    //非管理员操作,需要验证上传文件的大小
                    int maxLength = 50 * 1024; //单位:B
                    foreach (var file in Request.Form.Files)
                    {
                        if (file.Length > maxLength)
                        {
                            throw new Exception($"非管理员上传,文件大小必须在 {maxLength / 1024}KB 以内");
                        }
                    }
                }

                uploadRes.url  = M.Public.Services.UploadHelper.ImageHandler(Request.Form.Files);
                uploadRes.name = uploadRes.url.Substring(uploadRes.url.LastIndexOf("/") + 1);
            }
            catch (Exception ex)
            {
                uploadRes.status = "fail";
                uploadRes.errmsg = ex.Message;
            }

            return(uploadRes);
        }
        public IActionResult PutRelativeFile(string id)
        {
            // EnableBuffering
            Request.EnableBuffering();
            string token = Request.Query["access_token"];

            log.Info($"PutRelativeFile file id: {id}, access_token: {token}");

            // New Name
            string newName = Utf7ToUtf8(Request.Headers[WopiHeaders.RelativeTarget]);

            // File Full Path
            string fileFullPath = string.Empty;

            // Save new File local path
            string wholeDirectory = string.Empty;

            try
            {
                log.Info($"PutRelativeFile New File Start: {newName}");

                wholeDirectory = $"{_hostingEnvironment.ContentRootPath}/Files/{Guid.NewGuid().ToString()}/";
                // Create directory
                Directory.CreateDirectory(wholeDirectory);

                // New file to local
                fileFullPath = wholeDirectory + newName;

                // Save file to local
                using (FileStream fs = new FileStream(fileFullPath, FileMode.OpenOrCreate))
                {
                    const int bufferLen = 50 * 1024 * 1024;
                    byte[]    buffer    = new byte[bufferLen];
                    int       count     = 0;
                    while ((count = Request.Body.Read(buffer, 0, bufferLen)) > 0)
                    {
                        fs.Write(buffer, 0, count);
                    }
                    fs.Dispose();
                }

                log.Info($"PutRelativeFile New File End. File: {fileFullPath}");
            }
            catch (Exception ex)
            {
                log.Info($"PutRelativeFile Request Save: {ex.Message}");
            }

            // Upload file to server
            UploadRes uploadRes = UploadFile(token, fileFullPath, true);

            // Delete local path
            RemovePathWithFile(wholeDirectory);

            // new url for new file
            var    dynamicObj = JsonConvert.DeserializeObject <dynamic>(HttpUtility.UrlDecode(token));
            string host       = dynamicObj["host"].Value;
            var    port       = dynamicObj["port"].Value;

            if (port > 0)
            {
                host = $"{host}:{port}";
            }
            string docId = uploadRes.DocId.Replace("://", "=").Replace("/", "%2F");

            // new url
            string fileUrl = $"{host}/#/preview?{docId}";
            string newUrl  = $"{Request.Scheme}://{Request.Host.Value}/UnifyEditor.html?Url={HttpUtility.UrlEncode(fileUrl)}";

            // Return Result
            PutRelativeFile putRelativeFile = new PutRelativeFile()
            {
                Name        = newName,
                Url         = host,
                HostEditUrl = newUrl,
                HostViewUrl = newUrl
            };
            string jsonString = JsonConvert.SerializeObject(putRelativeFile);

            log.Info($"PutRelativeFile Json: {jsonString}");
            return(Content(jsonString));
        }