代码之家  ›  专栏  ›  技术社区  ›  bob.mazzo

通过html5 form data向c api发布多部分/表单数据

  •  0
  • bob.mazzo  · 技术社区  · 7 年前

    我的问题是我的C API控制器正在恢复 FormData Post 在此处检查多部分数据时请求: IsMimeMultipartContent() ,然后将消息返回到用户界面:

    415 (Unsupported Media Type)
    

     [HttpPost]
     [Route("MediaUpload")]
    public async Task<HttpResponseMessage> MediaUpload([FromUri]string sessionId, [FromUri]string patientId)
        {
    
            if (!Request.Content.IsMimeMultipartContent())
            {    // *** ALWAYS THROWS ERROR ***
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            
            //access form data  
            var provider = await Request.Content.ReadAsMultipartAsync(new InMemoryMultipartFormDataStreamProvider());            
            NameValueCollection formData = provider.FormData;
                
            //... additional code omitted
            
            var response = Request.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("UploadPath", fullPath);
            response.Headers.Add("Access-Control-Allow-Origin", "*");
            return response;
        }

    我的前端负载如下所示:

    • 请求头

    POST /api/import/MediaUpload?sessionID=c83f9589-742e-40e3-8cf5-7ffff141c3d7&patientId=5981 HTTP/1.1
    Host: localhost:56703
    Connection: keep-alive
    Content-Length: 6545
    Accept: application/json, text/plain, */*
    Origin: http://localhost:4200
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
    Content-Type: multipart/form-data
    Referer: http://localhost:4200/
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-US,en;q=0.9
    • 请求有效载荷

    ------WebKitFormBoundaryVrKSHPqdT9c6JkKv
    Content-Disposition: form-data; name="enctype"
    
    multipart/form-data
    ------WebKitFormBoundaryVrKSHPqdT9c6JkKv
    Content-Disposition: form-data; name="MediaInfo"
    
    [{"PatientID":5981,"PatientLastName":"Hobo","PatientFirstName":"John","DeviceID":"123","InstanceID":89,"PatientDOB":"1/3/1970","FileName":"image2.jpg","FileSize":5880,"ExamDate":"5/30/2018","PatientID":66665981,"SessionID":"sessionID=9999141c3d7"}]
    ------WebKitFormBoundaryVrKSHPqdT9c6JkKv
    Content-Disposition: form-data; name="files[]"; filename="image2.jpg"
    Content-Type: image/jpeg
    
    ÿØÿàJFIFÿÛC															
    
    ------WebKitFormBoundaryVrKSHPqdT9c6JkKv--

    我的前端正在发送 表格数据 ,然后调用 importService 进一步如下:

    save() {
    	let params = { patientID: ''};
    	let exDate = new Date(this.defaultDate).toLocaleDateString();
    	
    	// Populate MediaInfo object
    	let minfo = this.SetMediaArray();
    	params.pID = minfo[0].PID;
    	
    	const formData = new FormData();
    	formData.set("enctype", "multipart/form-data" );	// doesn't make a difference..
    	formData.append("MedInfo",  JSON.stringify(minfo));
    
    	for(var i=0; i<this.importImages.length; i++){
    		// append images to the files[] array, then send formData object to impService
    		formData.append("files[]", this.dataURItoBlob(this.importImages[i].TnUrl), this.importImages[i].name);
    	}
    
    	let endpoint = this.selectedObj.Url;			
    	
    	this.importService.saveImportObjects(formData, params, endpoint).subscribe(
    		data=> {			
    			console.log(data);			
    		},
    		err => {         
    			console.log(err);			
    		}
    	); 
    }

    所以基本上我想知道 http 我不知道该怎么做。

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  0
  •   bob.mazzo    7 年前

    我删除了multipart/boundary头属性,让浏览器为您处理它。上传成功了。