2016-10-20 49 views
0

こんにちは私はWCFではなくwebserviceからファイルをアップロードしたいです.C#を使用してWebアプリケーションで消費しています.Webアプリケーションからファイルを送信すると、サービスはそのファイル(テキストファイル)ウェブサイトまたは特定の場所のアップロードフォルダに保存します。私はこのasp.net webserviceを使用してファイルをアップロードする

のようなWebサービスを作成している。このため

: - >選択した新しいアイテム - 空のWebアプリケーション作成したWebサービス

作るために> Webサービス

1> Webサービス

に次のコードを書きました
public System.IO.Stream FileByteStream; 
[WebMethod] 
public void UploadFile() 
{ 
FileStream targetStream = null; 

Stream sourceStream = FileByteStream; 

string uploadFolder = @"D:\UploadFile"; 

string filePath = Path.Combine(uploadFolder, @"C:\Users\maya\Desktop\test.txt"); 

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

ここで私は入力を取っていません、私は手動で1つのテキストファイルを入力しました。私はそのファイルをuploadfolderに転送したいと思います。このラインで

HTTP 500 Internal server error

:私はこのエラーを取得しています

while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0) 

はどのようにこれを処理するために?

答えて

0

ウェブサービスの代わりにaspxページを使用します。これを行うにはjqueryを使用します。それは魅力のように働く。

これをあなたのファイルアップロードコントロールにします。ここで

<div> 
<input type="file" name="UploadFile" id="txtUploadFile" /> 
</div> 

はjqueryのコード

$('#txtUploadFile').on('change', function (e) { 
var files = e.target.files; 
if (files.length > 0) { 
    if (window.FormData !== undefined) { 
     var data = new FormData(); 
     for (var x = 0; x < files.length; x++){ 
      data.append("file" + x, files[x]); 
     } 

     $.ajax({ 
      type: "POST", 
      url: '/Upload.aspx', //put the complete url here like http://www.example.com/Upload.aspx 
      contentType: false, 
      processData: false, 
      data: data, 
      success: function(result) { 
       console.log(result); 
      }, 
      error: function (xhr, status, p3, p4){ 
       var err = "Error " + " " + status + " " + p3 + " " + p4; 
       if (xhr.responseText && xhr.responseText[0] == "{") 
        err = JSON.parse(xhr.responseText).Message; 
        console.log(err); 
       } 
      }); 
    } else { 
     alert("This browser doesn't support HTML5 file uploads!"); 
     } 
} 
}); 

であり、これは私のaspxコード

public partial class Upload : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      UploadFile(sender, e); 
     } 

    } 
    protected void UploadFile(object sender, EventArgs e) 
    { 
     try 
     { 
      HttpFileCollection fileCollection = Request.Files; 
      string savedfile = ""; 
      for (int i = 0; i < fileCollection.Count; i++) 
      { 
       try 
       { 
        HttpPostedFile upload = fileCollection[i]; 
        int f = fileCollection[i].ContentLength; 
        string filename = "/ProductImages/" + fileCollection[i].FileName; 
        upload.SaveAs(Server.MapPath(filename)); 
        savedfile += fileCollection[i].FileName; 
       } 
       catch (Exception ex) 
       { 

       } 

      } 
     } 
     catch(Exception ex) 
     { 
      List<string> ff = new List<string>(); 
      ff.Add(ex.Message.ToString()); 
      System.IO.File.WriteAllLines(Server.MapPath("/ProductImages/Error.txt"), ff); 
     } 

    } 
} 
ある
関連する問題