2013-12-16 1 views
0

나는 하늘 방울 저장소를 사용하고 있으며 사용자가 파일을 다운로드 할 수있게하고 싶습니다. 사용자가 다운로드하려는 파일을 클릭하면 AJAX를 사용하여 공유 액세스 서명을 생성하고 다운로드 할 URL을 반환합니다. 자바 스크립트를 사용하여 파일을 다운로드 할 수있는 방법이 있습니까? 아니면 사용할 수있는 다른 방법이 있습니다 ... 또한 URL에서 직접 다운로드 할 수 있어야 할 때 불필요한 비용이 발생할 이유가 없으므로 서버 쪽을 실행하지 않으려합니다.자바 스크립트가 URL을 다운로드 - 하늘빛 방울 저장소

기본적으로 Dropbox는 어떻게 작동합니까 ... 어떻게 든 양식을 제출하고 있습니까? 그것은 그렇게 될 필요조차 없습니다.

답변

1

제대로 이해하면 사용자가 SAS URL을 클릭 할 때 Open/Save As 프롬프트가 표시되기를 원합니다.

내 이해가 맞다고 가정하면 최근에 Windows Azure Storage가 몇 가지 기능 향상을 발표했습니다. 이 중 하나는 BLOB에 대해 Content-Disposition 속성이 추가되어 사용자가 BLOB에 대한 SAS 링크를 클릭 할 때이 Open/Save As 프롬프트를 표시 할 수있게합니다. BLOB 속성로 설정

  1. Content-Disposition : 다음 SAS 링크를 사용자가 클릭, 그들이 파일을 저장하라는 메시지가 표시됩니다 때마다이 경우, Content-Disposition, 당신은 두 가지 옵션이 있습니다. 그러나이 경우에는 항상 메시지가 표시되므로 SAS 연결 여부에 관계없이 사용자는 브라우저에서 문서를 인라인으로 볼 수 없습니다. 이 링크는 유용 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/windowsazure/ee691966.aspx.
  2. Content-Disposition을 SAS URL의 일부로 설정하십시오.이 경우 Content-Disposition이 포함 된 SAS URL을 클릭 할 때만 사용자에게 메시지가 표시됩니다. 이 링크는 유용 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx.

따라서 png 파일이 있다고 가정합니다. 옵션 1에서는 브라우저에서 인라인으로 표시되지 않으며 클라이언트 컴퓨터에 다운로드되어 컴퓨터의 등록 된 이미지 뷰어에서 열립니다. 옵션 2에서 SAS URL에 Content-Disposition이 설정되면 클라이언트 시스템에 이미지 파일이 다운로드되고 컴퓨터의 등록 된 이미지 뷰어에서 열립니다. 그렇지 않으면 브라우저에 직접 표시됩니다.

.Net을 사용하는 경우 저장소 클라이언트 라이브러리 3.0.0.0은이 기능을 지원하므로 REST API에서 래퍼를 작성할 필요가 없습니다 (하지만 CORS에 대한 이전 질문에서 PHP를 사용하고 있다고 생각합니다 :)).

+0

서명이 새 버전과 일치하지 않는 이유는 무엇입니까? 문자 그대로 100 % 나머지 코드는 동일합니다. $ version = '2012-02-12'이면 좋은 서명이 생성되지만 '2013-08-15'로 변경하면 서명이 일치하지 않습니다. 아직 다른 부분은 변경되지 않았지만 새 버전의 서명을 빌드하는 방법을 변경하는 방법에 대해서는 전혀 알지 못합니다. http://msdn.microsoft.com/en-us/library/windowsazure/dn140255.aspx – Paul

+0

' REST API를 통해 래퍼 작성하기, SignatureString을 생성 할 때 새로운 매개 변수를 모두 포함 시켰습니까? 언급 한 링크에서 '서명 문자열 구성하기'섹션을 참조하십시오. –

+0

PHP와 최신 버전의 REST API를 사용하여 SAS URL을 만드는 데있어 다른 질문을 올리는 것은 좋지 않을 수 있습니다. 나는 그것이 많은 사람들을 도울 것이라고 확신합니다. –

1

다시로드/재 지정을 방지하기 위해,이 라이브러리를 사용 :

http://jqueryfiledownload.apphb.com/

당신이을 설정하는 데 도움이 필요한 경우 : http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

을하지만 사용자를 리디렉션하려는 경우 같은 기본적인 것들을 사용할 수 있습니다 :

window.location.href = "http://stackoverflow.com/file.pdf"; 
+0

그리고 jqueryfiledownload를 사용하면 btw는 쿠키 부분을 건너 뛰지 않습니다. 그렇지 않으면 작동하지 않습니다! – BaNz

+1

나는 단지 당신과 다른 사용자가 완벽하게 괜찮 았다고 덧붙이고 싶었습니다. 당신의 답은 도서관이었습니다. 그러나이 문제는 Guarav의 글에서 설명한 Azure의 컨텐츠 배포 헤더에서 거짓말을했습니다. 그런 다음 올바른 jqueryfiledownload를 사용하여 정확한 URI가 올바른 SAS와 올바른 컨텐츠 배포 헤더로 다운로드되었으며 놀라운 결과를 보았습니다. D – Paul

1

내가 이것을 한 방식 과거에는 다운로드 URL로 숨겨진 iframe을 열었습니다. 당신은 당신이 안전하지 않은 다운로드와 보안 (HTTPS) 페이지에서이 작업을 수행하려고하지 않는 것을 확인해야합니다

var frame = document.createElement('iframe'); 
frame.src = url; // your Azure url 
frame.style.display = 'none'; 
document.body.appendChild(frame); 

주의 선 (HTTP)를 따라

뭔가

-1

내 프로젝트에서이 작업을 시도했지만 '다른 이름으로 저장'대화 상자가 나타나지 않습니다.

document.getElementById("downloadLink").innerHTML = "<a href=" + bloburi + ">" + bloburi + "</a>"; 

나는 파일이 열립니다이 링크를 클릭하면 :

Blob.Properties.ContentDisposition = "attachment" 
Blob.SetProperties() 

클라이언트 측 나는 그래서 블롭에 대한 사용자 액세스 할 수있는 권한을 부여했습니다 : 서버 측 나는 그래서 설정의 ContentDisposition 설정 시도 브라우저 창 대신 '다른 이름으로 저장'대화 상자가 나타나게하려면 어떻게해야합니까?

관련 문제