2011-02-23 1 views
2

https://github.com/blueimp/jQuery-File-Upload을 사용하고 있는데 파일을 업로드하여 지정한 폴더에 저장 한 다음 Json 객체를 반환했습니다. 그런 다음 브라우저 (IE8 사용)에서 "파일 다운로드"대화 상자가 열리고 확장명이 "upload75bea5a4"인 파일을 다운로드하라는 메시지가 표시됩니다. 나는 무엇이 잘못되었는지를 알 수 없었다.jQuery File Upload 플러그인이 파일을 다운로드하라는 메시지를 표시합니다. 무엇이 잘못 되었습니까?

답변

7

동일한 플러그인을 사용하고 있으며 문제없이 작동합니다. 내가 사용하고있는 코드를 게시하여 도움을 드릴 것입니다. Scott Hanselman's blog에서 본 C# 코드 (몇 가지 변경 사항이 있음).

파일의 속성을 저장하는 클래스 :

public class ViewDataUploadFilesResult 
{ 
    public string Name { get; set; } 
    public int Length { get; set; } 
    public string Type { get; set; } 
} 

업로드 코드, 아약스에 의해 호출됩니다

[HttpPost] 
    public string UploadFiles() 
    { 
     var r = new List<ViewDataUploadFilesResult>(); 
     Core.Settings settings = new Core.Settings(); 
     foreach (string file in Request.Files) 
     { 
      HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
      if (hpf.ContentLength == 0) 
       continue; 
      string savedFileName = Path.Combine(settings.StorageLocation + "\\Files\\", Path.GetFileName(hpf.FileName)); 
      hpf.SaveAs(savedFileName); 

      r.Add(new ViewDataUploadFilesResult() 
      { 
       Name = hpf.FileName, 
       Length = hpf.ContentLength, 
       Type = hpf.ContentType 
      }); 
     } 
     return "{\"name\":\"" + r[0].Name + "\",\"type\":\"" + r[0].Type + "\",\"size\":\"" + string.Format("{0} bytes", r[0].Length) + "\"}"; 
    } 

마법 만드는 자바 스크립트 조각 :

$('#file_upload').fileUploadUI({ 
    uploadTable: $('#files'), 
    downloadTable: $('#files'), 
    buildUploadRow: function (files, index) { 
     return $('<tr><td>' + files[index].name + '<\/td>' + 
       '<td class="file_upload_progress"><div><\/div><\/td>' + 
       '<td class="file_upload_cancel">' + 
       '<button class="ui-state-default ui-corner-all" title="Cancel">' + 
       '<span class="ui-icon ui-icon-cancel">Cancel<\/span>' + 
       '<\/button><\/td><\/tr>'); 
    }, 
    buildDownloadRow: function (file) { 
     return $('<tr><td>' + file.name + '<\/td><\/tr>'); 
    } 
}); 

살펴보고 몇 가지 검사를하십시오.

-

편집

I wrote an article about it.

+0

데이비스, 고맙습니다. 자바 스크립트 파일 "jquery.fileupload-ui.js"94에서 예외가 발생했습니다. 처리되지 않은 예외가 있음을 말합니다. 어떤 아이디어? –

+0

해당 예제 페이지에 **

**가 있습니다. 페이지에 추가 했습니까? 그것 없이는 오류가 있거나 전혀 파일이 업로드되지 않습니다. –

+0

그래, 거기에 그 라인이있다. 응답 내용 유형에 특별한 작업을 수행 했습니까? –

0

FAQ에서이 부분을 발견했습니다. # 2 https://github.com/blueimp/jQuery-File-Upload/wiki/Frequently-Asked-Questions

요점은 HTTP_ACCEPT 헤더가 존재하지 않는 또는 '응용 프로그램/JSON'(XHR 업로드에 iframe을 추론)을 포함하지 않는 경우 일반/텍스트 내용 유형을 설정하는 것입니다 참조하십시오.

+1 enctype = "multipart/form-data"에 대한 Sousa의 알림 - 콘텐츠 유형뿐만 아니라 그 내용도 조사했습니다.

0

나는 동일한 문제가있었습니다. 닷넷의 경우 돌아 오는 MVC의 내용 유형을 확인하기위한 코드는 다음과 같습니다

if (Request.ServerVariables["HTTP_ACCEPT"] != null && Request.ServerVariables["HTTP_ACCEPT"].Contains("application/json")) 
{ 
    return Json(data, "application/json"); 
} 
else 
{ 
    return Json(data, "text/plain"); 
} 

은 분명히 IE가 Content-type: text/plain하지만 text/plain을 좋아하지 않는다.

희망을 통해 누군가 더 많은 두통을 피할 수 있기를 바랍니다.

관련 문제