2014-07-22 4 views
0

У меня есть служба WCF, у которой есть функция Загрузить файл.Почтовый файл для службы WCF

public void UploadFile(Stream s) 
{ 
    FileStream targetStream = null; 
    Stream sourceStream = s; 

    string uploadFolder = @"C:\upload\"; 
    string filePath = Path.Combine(uploadFolder, Guid.NewGuid().ToString()); 

    using (targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) 
    { 
     //read from the input stream in 6K chunks 
     //and save to output stream 
     const int bufferLen = 65000; 
     byte[] buffer = new byte[bufferLen]; 
     int count = 0; 

     while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0) 
     { 
      targetStream.Write(buffer, 0, count); 
     } 

     targetStream.Close(); 
     sourceStream.Close(); 
    } 

} 


[ServiceContract] 
public interface ITransferService 
{ 
    [OperationContract] 
    RemoteFileInfo DownloadFile(DownloadRequest request); 

    //[OperationContract] 
    //void UploadFile(RemoteFileInfo request); 

    [OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/UploadFile")] 
    void UploadFile(Stream s); 
} 

И я использую этот Ajax/Jquery:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> 
<head profile="http://gmpg.org/xfn/11"> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>AJAX File Upload - Web Developer Plus Demos</title> 
<script type="text/javascript" src="js/jquery-1.3.2.js" ></script> 
<script type="text/javascript" src="js/ajaxupload.3.5.js" ></script> 
<link rel="stylesheet" type="text/css" href="./styles.css" /> 
<script type="text/javascript" > 
    $(function(){ 
     var btnUpload=$('#upload'); 
     var status=$('#status'); 
     new AjaxUpload(btnUpload, { 
      action: 'http://localhost:35711/webservice/TransferService.svc/UploadFile', 
      name: 'uploadfile', 
      onSubmit: function(file, ext){ 
       // if (! (ext && /^(jpg|png|jpeg|gif)$/.test(ext))){ 
       // // extension is not allowed 
       // status.text('Only JPG, PNG or GIF files are allowed'); 
       // return false; 
       //} 
       status.text('Uploading...'); 
      }, 
      onComplete: function(file, response){ 
       //On completion clear the status 
       status.text(''); 
       //Add uploaded file to list 
       if(response==="success"){ 
        $('<li></li>').appendTo('#files').html('<img src="./uploads/'+file+'" alt="" /><br />'+file).addClass('success'); 
       } else{ 
        $('<li></li>').appendTo('#files').text(file).addClass('error'); 
       } 
      } 
     }); 

    }); 
</script> 
</head> 
<body> 
<div id="mainbody" > 
     <h3>&raquo; AJAX File Upload Form Using jQuery</h3> 
     <!-- Upload Button, use any id you wish--> 
     <div id="upload" ><span>Upload File<span></div><span id="status" ></span> 

     <ul id="files" ></ul> 
</div> 

</body> 

Та же функция отлично работает, когда я использую ASP .NET в качестве клиента. Но я не могу это сделать с помощью Ajax/Jquery, возможно ли использование Ajax/JQuery? и если да, то как?

Может ли кто-нибудь предоставить простой пример JQuery?

+0

Информация, которую вы предоставили не достаточно, чтобы понять: 1) добавить уд_файл информация детали объекта сказать код JQuery и какой тип вы использовали для передачи данных? –

+0

У меня нет JQuery для этого. Но да, я отредактировал свой вопрос и добавил к нему еще код. –

+0

Вы используете загрузчик файлов jQuery? Проверьте это - http://www.codeproject.com/Articles/59551/Consuming-a-WCF-ASMX-REST-Service-using-jQuery –

ответ

0

Для jQuery вам необходимо предоставить услугу UploadService в качестве службы REST. В WCF это meens хостинг его через webHttpBinding.

Это связывание не поддерживает MessageContracts, поэтому вам нужно немного подписать свою подпись метода.

[ServiceContract] 
public interface IUploadService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", 
     BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = "Uploadfile?fileName={filename}&length={length}")] 
    void UploadFile(string filename, int length, Stream s); 

} 

Теперь у вас есть адрес, на котором размещается ваш файл.

Uploadfile? Имя_файла = Samplefile.jpg & длина = 72572

+0

И как я могу опубликовать его с помощью JQuery? –

Смежные вопросы