在RESTful WCF服务中以附件形式上传图像

本文关键字:形式上 图像 RESTful WCF 服务 | 更新日期: 2023-09-27 18:03:57

我试图在REST WCF服务中上传图像作为附件,我得到以下错误。"拒绝访问路径"C:'ImageUpload" "我已启用此文件夹的完全控制权限。我不明白为什么我得到这个错误。我是WCF的新手,大部分代码都是我从在线资源中收集的。感谢如果你能让我知道,如果有任何错误在我的代码。这是我的代码。


REST WCF Service Code:
 [OperationContract]
 [WebInvoke(UriTemplate = "uploadImage/{parameter1}")]
  void uploadImage(Stream fileStream);

public void uploadImage(Stream fileStream)
        {
            string filePath = @"C:'ImageUpload";
            FileStream filetoUpload = new FileStream(filePath, FileMode.Create);
            byte[] byteArray = new byte[10000];
            int bytesRead, totalBytesRead = 0;
            do
            {
                bytesRead = fileStream.Read(byteArray, 0, byteArray.Length);
                totalBytesRead += bytesRead;
            }
            while (bytesRead > 0);
            filetoUpload.Write(byteArray, 0, byteArray.Length);
            filetoUpload.Close();
            filetoUpload.Dispose();
        }

这是我的测试客户端代码(简单的。aspx网页)

 protected void btnUpload_Click(object sender, EventArgs e)
        {
            string file = FileUpload1.FileName;
            RESTService1Client client = new RESTService1Client();
            byte[] bytearray = null;
            string name = "";
            if (FileUpload1.HasFile)
            {
                name = FileUpload1.FileName;
                Stream stream = FileUpload1.FileContent;
                stream.Seek(0, SeekOrigin.Begin);
                bytearray = new byte[stream.Length];
                int count = 0;
                while (count < stream.Length)
                {
                    bytearray[count++] = Convert.ToByte(stream.ReadByte());
                }
            }  
            WebClient wclient = new WebClient();
            wclient.Headers.Add("Content-Type", "image/jpeg");
            client.uploadImage(FileUpload1.FileContent);
}

在RESTful WCF服务中以附件形式上传图像

这可能与WCF或您的代码无关。对于IIS进程用户来说,该文件夹上的权限很可能不够。默认情况下,ASP。. NET用户是网络服务。

尝试为您的ASP创建一个新的Windows用户。网络应用程序。授予该用户对上传文件夹的显式读/写访问权限。然后使用模仿法制作ASP。. NET使用该用户。http://www.codeproject.com/Articles/107940/Back-to-Basic-ASP-NET-Runtime-Impersonation

重写服务器端如下:

REST WCF服务代码:
[OperationContract]
[WebInvoke(UriTemplate = "uploadImage/{parameter1}/{parameter2}")]
void uploadImage(Stream fileStream, string fileName);

.

public void uploadImage(Stream fileStream, string fileName)
    {
        string filePath = @"C:'ImageUpload'";
        using (FileStream filetoUpload = new FileStream(filePath + fileName, FileMode.Create))
        {
            byte[] byteArray = new byte[10000];
            int bytesRead = 0;
            do
            {
                bytesRead = fileStream.Read(byteArray, 0, byteArray.Length);
                if (bytesRead > 0)
                {
                    filetoUpload.Write(byteArray, 0, bytesRead);
                }
            }
            while (bytesRead > 0);
        }
    }

和您的客户端:

 protected void btnUpload_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            RESTService1Client client = new RESTService1Client();
            client.uploadImage(FileUpload1.FileContent, Path.GetFileName(FileUpload1.FileName));
        }  
}