Files
Umbraco-CMS/components/umbraco.webservices/FileService.asmx.cs
Shandem f6d0d043b5 DO NOT DOWNLOAD. DOWNLOAT LATEST STABLE FROM RELEASE TAB
Created 4.1.0 branch

[TFS Changeset #55082]
2009-06-19 07:39:16 +00:00

197 lines
7.0 KiB
C#

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Collections.Generic;
using umbraco.cms.businesslogic.web;
using umbraco.cms;
using System.IO;
namespace umbraco.webservices.files
{
/// <summary>
/// Summary description for FileService
/// </summary>
[WebService(Namespace = "http://umbraco.org/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class fileService : BaseWebService
{
override public Services Service
{
get
{
return Services.FileService;
}
}
[WebMethod]
public void DeleteFile(String folderName, string fileName, string username, string password)
{
Authenticate(username, password);
// Check if folder is accessible
if (FileIO.FolderAccess(folderName))
{
// Check if the filename is valid
if (!FileIO.ValidFileName(fileName))
throw new ArgumentException(String.Format("Filename {0} not valid", fileName));
// Check if the file exists. If it does, we delete it
if (System.IO.File.Exists(FileIO.GetFilePath(folderName, fileName)))
{
System.IO.File.Delete(FileIO.GetFilePath(folderName, fileName));
}
else
{
throw new FileNotFoundException();
}
}
else
{
throw new ArgumentException("no access to specified folder");
}
}
[WebMethod]
public Byte[] DownloadFile(String folderName, string fileName, string username, string password)
{
Authenticate(username, password);
// Check if folder is accessible
if (FileIO.FolderAccess(folderName))
{
// Check if the filename is valid
if (!FileIO.ValidFileName(fileName))
throw new ArgumentException(String.Format("Filename {0} not valid", fileName));
// Check if the file even exists
if (!System.IO.File.Exists(FileIO.GetFilePath(folderName, fileName)))
{
throw new FileNotFoundException("Could not find file to delete");
}
// Create a stream, and send it to the client
FileStream objfilestream = new FileStream(FileIO.GetFilePath(folderName, fileName), FileMode.Open, FileAccess.Read);
int len = (int)objfilestream.Length;
Byte[] documentcontents = new Byte[len];
objfilestream.Read(documentcontents, 0, len);
objfilestream.Close();
return documentcontents;
}
else
{
throw new ArgumentException("no access to specified folder");
}
}
[WebMethod]
public void UploadFile(Byte[] docbinaryarray, String folderName, string fileName, string username, string password, bool deleteOld)
{
Authenticate( username, password);
// Check if folder is accessible
if (FileIO.FolderAccess(folderName))
{
// Check if the filename is valid
if (FileIO.ValidFileName(fileName))
throw new ArgumentException(String.Format("Filename {0} not valid", fileName));
// Check if the file exists. If it does, we delete it first ..
// TODO: Maybe we should have "deleted files, folder for this?
if (System.IO.File.Exists(FileIO.GetFilePath(folderName, fileName)))
{
if (deleteOld)
{
System.IO.File.Delete(FileIO.GetFilePath(folderName, fileName));
}
else
{
throw new ArgumentException("Cannot save. File allready exist");
}
}
// Open a filestream, and write the data from the client to it
FileStream objfilestream = new FileStream(FileIO.GetFilePath(folderName, fileName), FileMode.Create, FileAccess.ReadWrite);
objfilestream.Write(docbinaryarray, 0, docbinaryarray.Length);
objfilestream.Close();
}
else
{
throw new ArgumentException("no access to specified folder");
}
}
/// <summary>
/// To download a file, we need to know how big its going to be
/// </summary>
[WebMethod]
public int GetFileSize(String folderName, string fileName, string username, string password)
{
Authenticate(username, password);
// Check if folder is accessible
if (FileIO.FolderAccess(folderName))
{
// Check if the filename is valid
if (!FileIO.ValidFileName(fileName))
throw new ArgumentException(String.Format("Filename {0} not valid", fileName));
string strdocPath;
strdocPath = FileIO.GetFilePath(folderName, fileName);
// Load file into stream
FileStream objfilestream = new FileStream(strdocPath, FileMode.Open, FileAccess.Read);
// Find and return the lenght of the stream
int len = (int)objfilestream.Length;
objfilestream.Close();
return len;
}
else
{
throw new ArgumentException("no access to specified folder");
}
}
/// <summary>
/// Get all files in a specific folder
/// </summary>
/// <returns></returns>
[WebMethod]
public string[] GetFilesList(String folderName, string username, string password)
{
Authenticate(username, password);
if (FileIO.FolderAccess(folderName))
{
string fullPath = FileIO.GetFolderPath(folderName);
DirectoryInfo folder = new DirectoryInfo(fullPath);
FileInfo[] files = folder.GetFiles();
List<string> shortNames = new List<string> ( );
foreach (FileInfo file in files)
{
shortNames.Add(file.Name);
}
return shortNames.ToArray();
}
else
{
throw new ArgumentException("no access to specified folder");
}
}
}
}