首页 > 解决方案 > 通过 web api 2.0 将图像从虚拟目录上传到服务器

问题描述

我有 web api,当客户端是移动应用程序而不是 web 客户端是 asp.net web 时,我可以使用它将图像上传到服务器。

我能够将图像保存到虚拟文件夹,但无法通过存储 Web/移动上传图像的 Web api 上传。

我确定我在 asp.net 中编写客户端代码时犯了错误,或者无法处理文件上传控制的正确回发,请指导我哪里错了。

这是 API - “ stackoverflow.com/a/35449422/8875271 ”;我正在使用的我只想要使用图像上传控件的asp.net Web表单的客户端代码/示例我已经厌倦了这个,但这似乎不起作用请帮助我卡住了。

移动设备和邮递员上的 API 工作文件。

设计

    <asp:UpdatePanel ID="filepanel" runat="server">
    <ContentTemplate>
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:LinkButton ID="LinkButton1" runat="server" Text="Attach" OnClick="LinkButton1_Click"></asp:LinkButton>
     </ContentTemplate>
     <Triggers>
      <asp:PostBackTrigger ControlID="LinkButton1"  />
  </Triggers>
     </asp:UpdatePanel>

代码

 protected void LinkButton1_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        System.Diagnostics.Debug.WriteLine(" uploaded");
        APIs api = new APIs();
        using (HttpClient client = new HttpClient())
        {
            try
            {

                string filename = FileUpload1.PostedFile.FileName;
                Session["FileUpload1"] = filename;

                FileUpload1.SaveAs(Server.MapPath("images\\" + FileUpload1.PostedFile.FileName));

                using (var fileStream = File.Open(Server.MapPath("images\\" + Session["FileUpload1"].toString() ), FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
                {
                    System.Diagnostics.Debug.WriteLine("image file opened");
                    var content = new MultipartFormDataContent();
                    if(fileStream!=null)
                    content.Add(new StreamContent(fileStream));
                    var response = client.PostAsync(api.pictureUpload, content).Result; -------Line 174
                    if (response.IsSuccessStatusCode)
                    {
                        System.Diagnostics.Debug.WriteLine("File Uploaded Successfully");
                    }
 else
 {
  System.Diagnostics.Debug.WriteLine("File Uploaded 
 UnSuccessfully"+response.RequestMessage);
 }
                }

            }
            catch (IOException iex)
            {
                System.Diagnostics.Debug.WriteLine("io exception:" + iex.ToString());
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("image path:" + ex.ToString());
            }
        }
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("no file");
    }
}

错误

    System.AggregateException: One or more errors occurred. ---> 
    System.NotSupportedException: Stream does not support reading.
    at System.IO.Stream.BeginReadInternal(Byte[] buffer, Int32 offset, Int32 
    count, AsyncCallback callback, Object state, Boolean serializeAsynchronously)
    at System.IO.FileStream.BeginRead(Byte[] array, Int32 offset, Int32 numBytes, 
    AsyncCallback userCallback, Object stateObject)
   at System.Net.Http.StreamToStreamCopy.StartRead()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at System.Threading.Tasks.Task`1.get_Result()
   at TransferToMIR.LinkButton1_Click(Object sender, EventArgs e) in path\TransferToMIR.aspx.cs:line 174
---> (Inner Exception #0) System.NotSupportedException: Stream does not support reading.
   at System.IO.Stream.BeginReadInternal(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state, Boolean serializeAsynchronously)
   at System.IO.FileStream.BeginRead(Byte[] array, Int32 offset, Int32 numBytes, AsyncCallback userCallback, Object stateObject)
   at System.Net.Http.StreamToStreamCopy.StartRead()<---

标签: c#asp.netasp.net-web-apifile-uploadfilestream

解决方案


此更改使其起作用

using (var fileStream = File.OpenRead(Server.MapPath("images\\" + Session["Filename"].toString())))

推荐阅读