Загрузить файл с помощью asp.net веб-сервис

#c# #asp.net #web-services

#c# #asp.net #веб-сервисы

Вопрос:

Здравствуйте, я хочу загрузить файл с веб-сервиса, а не с WCF.Я использую C # и использую его с помощью веб-приложения.Из веб-приложения отправьте файл, и сервис примет этот файл (текстовый файл) и поместит в папку загрузки веб-сайта / или в определенное местоположение.

Для этого я создал веб-сервис следующим образом

: Для создания 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:UsersmayaDesktoptest.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

в этой строке:

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

Как с этим справиться?

Ответ №1:

Я использую страницу 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 amp;amp; 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);
        }

    }
}