2013-05-22 6 views
0

파일을 업로드 한 후 JSON 구조를 반환하려고합니다. 파일은 웹 서버에 잘 저장됩니다. 문제는 "UploadJobStatus"구조를 사용하여 데이터를 반환하려고 할 때 IE가 파일을 저장하라는 메시지를 표시합니다. "로컬 파일에서 UploadFile554b0687을 열거 나 저장 하시겠습니까?" 파일이 웹 서버에 먼저 저장된 다음 이상한 파일 이름과 함께 묻는 질문이 표시됩니다. 나는 내용이 반환 된 JSON 데이터 것을 볼 파일을 저장하는 경우 :WCF/jQuery/HttpContext - 파일을 저장하라는 메시지가 표시되는 이유는 무엇입니까?

[{ "오류": "업로드 된 파일을 성공적으로.", "성공"사실}]

그러나, 나는 변경하는 경우 내 인터페이스가 VOID 만 반환하면 프롬프트가 표시되지 않습니다. jQuery 코드에서 반환 된 데이터를 반복 할 수 있도록 구조체를 반환해야합니다.

인터페이스 :

[System.Web.Services.WebMethod(EnableSession = true)] 
[OperationContract(Name = "RunJob_UploadFile")] 
[WebInvoke(UriTemplate = "/RunJob/UploadFile", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, Method = "POST")] 
List<RunJob.UploadJobStatus> UploadFile(); 

번호 : 목록의

 public List<UploadFileStatus> UploadFile() 
     { 
     List<UploadFileStatus> temp = new List<UploadFileStatus>(); 

     var files = System.Web.HttpContext.Current.Request.Files; 
     if ((files.Count > 0) && (!String.IsNullOrEmpty(files[0].FileName))) 
     { 
      try 
      { 
       HttpContext.Current.Request.Files[0].SaveAs(@"C:\TEST\TEST.ZIP"); 
       temp.Add(new UploadFileStatus(true, "Uploaded file successfully.")); 
       return temp; 
       //return; 
      } 
     catch (Exception e) 
     { 
      temp.Add(new UploadFileStatus(false, "Not able to upload the file!")); 
      return temp; 
     } 
... 

구조 :

public struct UploadFileStatus 
{ 
    public bool Successful; 
    public string Error; 

    public UploadFileStatus(bool successful, string error) 
    { 
     this.Successful = successful; 
     this.Error = error; 
    } 
} 

jQuery를 :

function UploadFile() { 
    if ($("#FileToUpload").val() != "") { 
     $.ajaxFileUpload 
      (
       { 
        url: "svc/RunJob.svc/RunJob/UploadFile", 
        secureuri: false, 
        fileElementId: "FileToUpload", 
        data: 
        { 

        }, 
        success: function (jqXHR, textStatus) { 
         if (textStatus == "success") { 
          alert("File was uploaded."); 
         } 
         else { 
          alert("Upload file failed!"); 
         } 
        }, 
        error: function() { 
         alert("Error!"); 
        } 
       } 
      ) 
    } 
} 

아이디어가 있으십니까? 고맙습니다.

+0

나는 이것이 ajax 호출을 통해 웹 페이지에서 업로드 된 것으로 추정하고 있습니까? jQuery ajax 코드가 유용 할 수있다. 또한 chrome의 네트워크 탭과 같은 것을 사용하여 요청/응답을 확인한 경우 요청에서 반환 된 실제 콘텐츠 유형은 무엇이며 (응답 헤더를 보면) 응답 본문에 나타나는 데이터입니다 정확히? – Klors

+0

양식에서 페이지를 게시하는 경우 문제가있을 수 있습니다. http://stackoverflow.com/questions/9230779/ie9-prompts-user-on-submission-of-hidden-iframe – Klors

+0

해당 문제 Chrome에서는 발생하지 않습니다. 반환 된 데이터 (JSON 구조체)는 HTTP 200 응답에 나타납니다. – Max

답변

관련 문제