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