1

이미지 업로드가있는 등록 양식을 사용하고 Windows Azure 서버에서 패키지 응용 프로그램을 업로드 할 때 작동하지 않습니다.Windows Azure 플랫폼에서 이미지를 업로드하는 방법 : 최선의 접근 방식

서버에있는 이미지 주소는 다음과 같습니다

F:\sitesroot\0\Uploads\Users\9259826_2121813246965_1294840438_2490950_6619588_n.jpg 

이 같은이 이미지 URL이 있다면, 그것은 상대 경로입니다 함께 :

http://dealma.cloudapp.net/Uploads/Users/9259826_2121813246965_1294840438_2490950_6619588_n.jpg 

이미 문제를 해결할 것입니다.

I 업로드 사용하고 현재의 코드는 이것이다 :

if (userImg != null && userImg.ContentLength > 0) 
      { 
       try 
       { 
        var fileName = Url.Encode(userImg.FileName); 
        //no overwrite files 
        var pathToCheck = Server.MapPath("~/Uploads/Users/" + fileName); 
        var savePath = Server.MapPath("~/Uploads/Users/"); 
        var tempfileName = fileName; 
        int counter = 2; 

        while (System.IO.File.Exists(pathToCheck)) 
        { 
         tempfileName = counter.ToString() + fileName; 
         pathToCheck = savePath + tempfileName; 
         counter++; 
        } 

        fileName = tempfileName; 

        var finalImg = Path.Combine(savePath, fileName); 
        userImg.SaveAs(finalImg); 

        //Img name 
        userSet.Picture = finalImg; 
        userSet.Thumbnail = finalImg; 
       } 
       catch (Exception ex) 
       { 
        Response.Write("Não foi possível fazer upload do arquivo: " + ex.Message); 
       } 
      } 

사람이이 문제를 해결하는 방법을 알고 있습니까?

답변

1

요청을 처리하는 웹 역할이있는 가상 컴퓨터에 이미지를 저장하려고합니다.

아마 응용 프로그램에 둘 이상의 웹 역할 인스턴스가 있습니다. 따라서 파일은 한 컴퓨터에 저장되지만 다음 요청은이 파일이없는 다른 웹 역할과 가상 컴퓨터에서 제공됩니다.

그렇다면 모든 웹 역할에서 액세스 할 수 있어야하는 모든 데이터를 blob에 저장하는 것이 좋습니다. 정적 데이터가있는 경우이 데이터를 웹 역할과 함께 패키지에 넣을 수 있습니다. 다른 모든 데이터는 얼룩에 있어야합니다.

응용 프로그램의 코드를 수정하지 않으려면 BLOB 저장소의 일부를 다른 하드 드라이브로 웹 역할의 모든 인스턴스에 매핑 할 수 있습니다. 이 경우 수신 된 데이터를이 매핑 된 디스크에 작성하기 만하면됩니다. 결과는 모든 웹 역할에서 액세스 할 수 있습니다.

+0

이것은 훌륭한 조언이지만 제 고객에게 보여줄 수있는 매우 빠른 해결책이 필요합니다 ... –

+0

두 개 이상의 인스턴스가있는 경우 여러 인스턴스에서 클라우드 드라이브로 쓸 수 없으므로 실행 가능한 솔루션이 아닙니다. .직접 BLOB에 쓰면 잘 작동합니다. –

6

corvus에 명시된 바와 같이, 가상 컴퓨터의 여러 인스턴스에서 일시적으로 공유되는 "로컬 저장소"에 쓰고 있습니다.

블롭 저장 기능을 사용하면 임의의 파일, 이미지 등을 저장할 수 있습니다. 각 항목은 자체 BLOB에 저장됩니다. 또한 "컨테이너"라는 개념을 가지고 있습니다 - 최상위 디렉토리 폴더라고 생각하십시오. 중첩 된 컨테이너는 없지만 이름에 경로 문자를 사용하여 컨테이너를 에뮬레이트 할 수 있습니다 (빠른 솔루션이 필요하므로 지금은 건너 뛰십시오).

Windows Azure Platform Training Kit을 다운로드하고 실험실 소개 "클라우드 서비스"를 보면 방영 저장소에 사진이 업로드되는 방명록 응용 프로그램이 표시됩니다. 저장소 계정을 설정하는 방법과 파일을 로컬 파일 시스템 대신 blob에 푸시하는 코드 작성 방법을 볼 수 있습니다. 파일 저장

초기화 BLOB 클라이언트 및 컨테이너를 설정 : 다음은 샘플에서 코드 조각의 업로드 처리기에서 지금

var storageAccount = 
    CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); 

// create blob container for images 
blobStorage = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobStorage.GetContainerReference("uploads"); 
container.CreateIfNotExist(); 

를 대신 로컬 파일 시스템의 BLOB 쓸 것 :

string uniqueBlobName = string.Format("uploads/image_{0}{1}", 
    Guid.NewGuid(), Path.GetExtension(UserImg.FileName)); 
CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName); 
blob.Properties.ContentType = UserImg.PostedFile.ContentType; 
// note: there are several blob upload methods - 
// choose the best one that fits your app 
blob.UploadFromStream(UserImg.FileContent); 

플랫폼 교육 키트를 다운로드하면 전체 작동 예제가 표시됩니다.

+0

다른 사람들이 찾아내는 경우이 연구소는 이제 "클라우드 서비스 소개"라고합니다. –

관련 문제