닷넷 코어는 사진을 업로드하는 두 가지 방법을 WebApi

나는 코드에 말을 많이하지 않았다 사진을 업로드 주로 여기입니다.

방법 1 : 폼 양식을 통해 업로드

후면 :

코드를 복사
     /// <요약> 
        /// 양식 서식에 의해 제출 된 사진을 업로드 
        /// </ 요약> 
        /// <리턴 A> </ 반환 A> 
        [경로 ( "업로드 / FormImg")] 
        [HttpPost] 
        공공 ActionResult UploadImg ( 목록 <IFormFile> 파일) 
        { 
            IF (files.Count <1). 
            { 
                반환 오류 () "파일이 비어"; 
            } 
            파일의 주소를 반환 // 
            ; 파일 이름 목록 <문자열> 목록 새 새 = <문자열> ()             
            = VAR를 지금 DateTime.Now; 
            // 파일 저장 경로 
            VAR을 webRootPath = _hostingEnvironment.WebRootPath; 
            VAR적인 filePath = 및 String.format ( "/ 업로드 / {0} / {(1)} / {2} /"now.ToString ( "YYYY") now.ToString ( "YYYYMM "), now.ToString ("YYYYMMDD "));
            // 현재의 웹 디렉토리를 얻을
            (! Directory.Exists (webRootPath +적인 filePath)) IF 
            { 
                ; Directory.CreateDirectory (webRootPath +적인 filePath) 
            } 
            은 try 
            { 
                (항목 VAR의 파일)을 foreach는 
                { 
                    IF (! 항목 = NULL) 
                    { 
                        # 지역 이미지 파일의 상태를 판단 
                        // 파일 접미사 
                        var에 fileExtension = Path.GetExtension (item.FileName); 

                        // 접미사가 화상 있는지 여부를 확인 
                        const를 문자열 fileFilt = ".gif 중요 | .JPG | .JPEG | .PNG"; 
                        만약에 (fileExtension == NULL을) 
                        { 
                            BREAK; 
                            // 반환 오류 ( "업로드 파일 접미 말 없음"); 
                        } 
                        IF (fileFilt.IndexOf (fileExtension.ToLower (), StringComparison.Ordinal) <= -1) 
                        { 
                            BREAK; 
                            / / ( "이미지 JPG, PNG, GIF 형식을 업로드하세요") 오류를 반환; 
                        } 

                        // 파일의 크기를 결정     
                        긴 길이 = item.Length; 
                        IF (길이> 1024 * 1024 * 2) // 2M 
                        { 
                            BREAK;
                            ( "2M보다 클 수 없습니다 파일을 업로드") 오류를 반환 //; 
                        }

                        #endregion의 

                        VAR strDateTime = DateTime.Now.ToString ( "yyMMddhhmmssfff"); // 문자열 인수 시간 
                        . VAR strRan = Convert.ToString (새 랜덤 () 다음 (100, 999)); // 세 난수 생성 
                        , VAR의 SAVENAME strRan + + = strDateTime fileExtension 

                        //는 화상 데이터를 삽입                  
                        은 USING (FS = System.IO.File.Create FileStream을 (여기서 filePath webRootPath + + SAVENAME)) 
                        { 
                            아이템 .CopyTo (FS) 
                            fs.Flush (); 
                        } 
                        filenames.Add (여기서 filePath SAVENAME +); 
                    } 
                } 
                성공을 리턴 (파일명의) ; 
            } 
            캐치 (예외 EX) 
            { 
                // 여기에 오류 레코드의 원인이 증가 로그인 
                //ex.ToString (); 
                반환 오류 ( "업로드 실패" ); 
            } 
        }
코드를 복사

나는 이미지 데이터를 렌더링하는 데 주로 여기에 오전, 그래서 조건을 결정하는 것은 그림 파일에 더이 어디 요구, 자기 조정에 따라. 저장 파일 포함.

 

전면 :

코드를 복사
<! DOCTYPE HTML> 
<HTML> 
<HEAD> 
    <TITLE> 닷넷 코어 WebApi图片上传</ 제목> 
    <메타 문자 집합 = "UTF-8"/> 
    <스크립트 유형 = "텍스트 / 자바 스크립트"SRC는 = "/의 JS / JQuery와-1.10.2.min.js "> </ script> 
    <스크립트 유형 ="텍스트 / 자바 스크립트 "SRC는 ="/의 JS / jquery.form.min.js "> </ script> 
</ head> 
<body> 
<H1>通过형태表单提交</ H1> 
<form 자료 = "myForm을 'NAME ="myForm을 "METHOD ="POST "에 enctype ="multipart / form-data "로 
                    작용 ="HTTPS : // 로컬 호스트 : 44,376 / 업로드 / FormImg "> 
    <input 타입 ="파일 "NAME ="파일 "ID ="파일 "값 ="업로드 된 파일을 선택 "다중 /> 
    <유형 =의 INPUT"버튼 "위에서 언급 한 id ="submitbtn "값 ="이 제출 "onclick을 ="uplpadfile () "> 
</ FORM> 

<DIV> < / DIV> 
   사진을 업로드, 반환 주소
   <DIV ID = "imglist"> 
            URL : "https : //로 로컬 호스트 :
</ DIV> <스크립트 유형 = "텍스트 / 자바 스크립트">

    //前端第一种提交方式 기능 uplpadfile () { //获取表单的数据 VAR formdata의 var 파일 = $ ( "# 파일"). 수 (0) ; VAR 파일 = file.files; VAR의 새로운 FormData formdata = (); 위한 VAR (I = 0; I는를 <files.length; 내가 ++) { formdata.append ( "파일을"파일 [I]); } $ 아약스 ({ 유형 : '포스트' 데이터 : formdata, ContentType을 : 거짓, processData : 거짓, 성공 : 기능 (결과) { 경우 (result.Success) { result.Data의 imglist = VAR] (imglist의 VAR I)에 대한 { $ ( "#의 imglist")를 APPEND ( '<IMG SRC에 = "'+ imglist [I] + '"/>'); } } 밖의 { 경보 ( '커밋은 제출을 재 시도 실패') } } )} } </ SCRIPT> </ BODY> </ HTML>
코드를 복사

방법을 작성 제출할 업로드하기 또한, 데이터의 두 개의 다른 제출이 있습니다 :

두 번째 방법 :

코드를 복사
uplpadfile 함수 () { 
        //获取表单的数据         
        VAR formdata = 새로운 FormData (document.getElementById를 ( "myForm을")); 

        $ 아약스 ({ 
            유형 : '포스트' 
            데이터 : formdata,                         
            ContentType을 : 거짓, 
            processData : 거짓, 
            URL : "https : //로 로컬 호스트 : 44376 / 업로드 / FormImg" 
            성공 : 기능 (결과) { 
                경우 (결과. 성공) { 
                    var에 imglist = result.Data; 
                    imglist의 VAR (I)에 대한 { 
                        $ ( "#의 imglist") (추가 '<IMG SRC = "'+ imglist [I] + '"/>.'); 
                    ; 경보 ( '커밋이 제출을 재 시도 실패') 
                }                             
            } 
        )} 
    } 
</ SCRIPT>
코드를 복사

 

 세 가지 방법 :

코드를 복사
<script 타입 = "텍스트 / 자바 스크립트"> 
    함수 uplpadfile () { 

        $ ( "# myForm을") ajaxSubmit (함수 (결과) {. 
            (result.Success) {경우 
                VAR의 imglist = result.Data; 
                VAR (i에 imglist에서 ) { 
                    $ ( "#의 imglist") (추가 '<IMG SRC = "'+ imglist [I] + '"/>'). 
                }                     
            한다} else {                     
                경고 ( '提交失败,重新尝试提交'); 
            } 
        } ); 
        
    }; 
</ script>
코드를 복사

  

여기에 전면주의 할 점 :

 1, 양식 테이블과 결합되어야   에 enctype = "다중 / 폼 데이터 "   탭

 여러 이미지를 업로드 할 경우 2, 파일 업로드 컨트롤 파일, 당신은 추가해야 할  여러  레이블을

 3, 방식 :  formdata.append ( "파일", 파일 [I])    의   파일   같은 매개 변수와 인터페이스 파일 이름에 동의해야합니다

 4 양식 두 세 가지 방법 : <유형 = "파일"이름 = "파일"의 INPUT>  이름이  동일한 매개 변수와 인터페이스 파일 이름에 동의해야합니다

 

요약의 방법으로 제출 양식 :

문서의 제출의 프런트 엔드는 세 가지 방법으로 사용할 수 있습니다.

파일이 형태와 다른 데이터와 함께 제출하는 경우에, 당신은 두 번째와 세 번째 방법을 사용할 수 있습니다.

당신은 단지 별도의 데이터 파일을 제출하려는 경우, 당신은을 사용할 수 있습니다.

 

==================== 화려한 분할 선 ====================

 

두 번째 방법 : Base64로 문자를 업로드하여

후면 :

코드를 복사
     /// <요약> 
        ///文件上传, Base64로 
        /// </ 요약> 
        /// <PARAM NAME = "fileBase64">를 Base64 </ PARAM> 
        /// <PARAM NAME = 'FILENAME ">文件名< / PARAM> 
        /// <리턴> </ 반환> 
        [HttpPost] 
        [도로 ( "업 / Base64로")] 
        공중 ActionResult UploadBase64 (fileBase64 문자열, 문자열 파일명) 
        { 
            바이트 [] 바이트 = fileBase64.ToBytes_FromBase64Str (); 
            VAR의 fileExtension = Path.GetExtension (파일 이름); 
            VAR strDateTime = DateTime.Now.ToString ( "yyMMddhhmmssfff"); //取得时间字符串 
            VAR strRan = Convert.ToString (새로운 랜덤 () 다음에 (100, 999).);
            VAR saveName = strDateTime + strRan + fileExtension;
            var에 savePath = "업로드 / IMG /"+ DateTime.Now.ToString ( "YYYYMMDD") + "/"+ saveName; 
            문자열적인 filePath = "https://oss.tiaobox.com/"+ savePath; 
            시도 
            { 
                //将文件上传到阿里云OSS 
                사용 (MemoryStream을 m = 새로운 MemoryStream을 (바이트)) 
                { 
                    var에 클라이언트 = 새로운 OssClient (aliyunconfig.EndPoint, aliyunconfig.AccessKeyID, aliyunconfig.AccessKeySecret); 
                    PutObjectRequest _objRequest = 새로운 PutObjectRequest (aliyunconfig.BucketName, savePath, m); 
                    client.PutObject (_objRequest); 
                } 
                성공 (파일 경로를) 반환; 
            } 
            캐치 (예외 EX) 
            { 
                WriteSysLog (ex.ToString () 인터페이스 호출 Entity.Base_SysManage.EnumType.LogType 예외.) 
                반환 오류 ( "업로드에 실패했습니다!");                 
            } 
            
        }
코드를 복사

 

이 백엔드 방법, 당신은 단지 파일, 제출 Base64로 문자로 파일을 변환 할 수있는 전면 필요성을 업로드 할 수 있습니다.

위의 방법도 사용할 수 있습니다 여기에 알리 클라우드 OSS에 저장되는 데이터를 저장하는 방법은 로컬로 저장. 궁극적으로 파일 경로를 반환합니다.

 

전면 :

코드를 복사
<! DOCTYPE HTML> 
<HTML> 
<HEAD> 
    <TITLE> 닷넷 코어 WebApi 사진을 업로드 </ 제목> 
    <메타 문자 집합 = "UTF-8"/> 
    <스크립트 유형 = "텍스트 / 자바 스크립트"SRC = "/ JS / 1.10.2.min.js-jQuery를 "> </ script> 
    <script 타입 ="텍스트 / 자바 "는이 SRC ="/ JS / jquery.form.min.js "> </ script> 
</ head> 
<body> 
<H1> Base64로 문자로 문서를 </ H1>를 제출 

<= "파일"이름 입력 타입 "="basefile "ID ="basefile "값 다중 / 업로드 할 파일을 선택"> 


"= 유형의 <스크립트를 텍스트 / 자바 스크립트 "> 
    $ ("#의 basefile "). 변경 (함수 () { 
        var에 basefile = Base64로 (document.getElementById를 ("basefile ")); 
    }) 

    // 업로드 
    기능 updateBackground (파일 이름, imgUrl에) {
 
      // 제출하기 전에 서식 태그를 제거
      imgUrl에 imgurl.replace = ( "데이터 : 이미지 / JPEG;베이스 64" "") .replace ( "데이터 : 이미지 / PNG;베이스 64" "") .replace ( "데이터 : 이미지 / JPG;베이스 64" "") .replace ( "데이터 : 이미지 / GIF;베이스 64" "") .replace ( "데이터 : 이미지 / BMP;베이스 64" ""); 
      // urlElement.innerHTML = imgUrl에; 
      var에 businessParam = { 
            fileBase64 : imgUrl에, 
            파일 이름 : 파일 이름 
        }; 

      $ 아약스 ({ 
        URL : 'https : //로 로컬 호스트 : 44376 / 업로드 / Base64로' 
        데이터 : businessParam, 
        유형 : '포스트', 
        dataType와 'JSON', 
        성공 : 기능 (결과) { 
            경우 (결과.
            }                 
        } 
        오류 : 기능 (데이터) {                 
            경고 ( "오류 :"+ data.Error); 
        } 
      }) 

    } 


    // Base64로의에 문서 
    기능 Base64로 (파일) { 
        IF (대해서 typeof합니다 (을 FileReader는) === '정의되지 않은' ) { 
           경고 ( "죄송합니다을 FileReader를 지원하지 않는 브라우저는 최신 브라우저 작업을 사용!"); 
        } 
        var에 판독기을 FileReader 새로운 새로운 = ();             
        VAR을 = (POS [0] .name.lastIndexOf을 file.files ". "); 
        VAR은 = ([0] .name.substring 입력 file.files POS + 1).;             
        // 파일 포맷을 결정
        경우 (type.toLowerCase ()! = "PNG"&& type.toLowerCase ()! = 'JPG'&& type.toLowerCase ()! = 'JPEG'&& type.toLowerCase ()! = '지프'&& type.toLowerCase ( ) = 'BMP') {! 
            경고 ( "格式의错误,请上传'PNG, JPG, JPEG, BMP, GIF'를格式文件"); 
            반환; 
        } 
        
        reader.onloadend = ( 
            함수 (E) { 
                imgUrl에 e.target.result =; 
                updateBackground (file.files [0] .name을 imgUrl에) 
            } 
        );        
        파일 판독 // 
        reader.readAsDataURL을 (file.files [0]); 
        
    } 
</ SCRIPT> 
</ BODY> 
</ HTML>
코드를 복사

 

Base64로 문자 파일로 전환 문자의 앞 끝 부분에있는 라벨 형식의 파일을 제거 할 필요가 없다는 점에 유의해야한다. 그렇지 않으면 Base64로 - 투 - 다시 문자가 제대로 읽을 수 없습니다.

후단 또는 데이터를 수신하는데, 처리 할 수있다.

 

그는 추가 :

_hostingEnvironment의 정의

코드를 복사
개인 읽기 전용 IHostingEnvironment _hostingEnvironment; 
        공개 UploadController (IHostingEnvironment hostingEnvironment, iOptions에 <AliyunConfig> _aliyunconfig) 
        { 
            _hostingEnvironment = hostingEnvironment; 
            aliyunconfig = _aliyunconfig.Value; 
        }
코드를 복사

 

ToBytes_FromBase64Str String 클래스의 메서드는 확장

  공용 static 바이트 [] ToBytes_FromBase64Str (문자열 base64Str) 
  { 
        Convert.FromBase64String (base64Str)을 반환; 
  }

 

 오류 또는 장소의 부족, 날 수정하십시오, 서로 배운다.

 

 

참조 문서 또한 큰 파일을 업로드에 대한이 이야기한다 :

https://www.cnblogs.com/seabluescn/p/9229760.html

 

십시오 : HTTPS : //www.cnblogs.com/leoxuan/articles/11087121.html

추천

출처www.cnblogs.com/pingming/p/11330921.html