2016-10-20 2 views
0

안녕하세요, WCF가 아닌 webservice에서 파일을 업로드하고 싶습니다. C#을 사용하고 웹 응용 프로그램에서 사용하고 있습니다. 웹 응용 프로그램에서 파일을 보내면 서비스에서 해당 파일 (텍스트 파일) 웹 사이트 또는 특정 위치의 업로드 폴더에 있습니다.asp.net webservice를 사용하여 파일 업로드

이 들어 나는이

같은 웹 서비스 만든 : 웹 서비스

를 만들기위한

만든 빈 웹 응용 프로그램 -> 선택 새 항목 -> 웹 서비스

웹 서비스

코드 다음

1> 쓴

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(); 
} 

내 입력이 없습니다. 수동으로 한 텍스트 파일을 입력했습니다. 해당 파일을 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!"); 
     } 
} 
}); 

입니다 그리고 이것은 내 영문 코드

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); 
     } 

    } 
} 
관련 문제