c# - 通过 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()<---
解决方案
此更改使其起作用
using (var fileStream = File.OpenRead(Server.MapPath("images\\" + Session["Filename"].toString())))
推荐阅读
- pandas - pd.DataFrame.merge 找不到匹配项
- php - 如何通过 ffmpeg 加速 rtsp 流的屏幕截图捕获?
- c - Linux 的 Windows 子系统上的 CTRL+D 问题
- python - 当你寻找一个为写入而打开的文件的末尾时会发生什么?
- arrays - 如何从 json 文件中查找数组中的文本?
- c# - 使用依赖注入在运行时创建 WPF 用户控件
- android - 处理Android:java.lang.IllegalArgumentException:文件包含路径分隔符
- python - 烧瓶数据库初始化错误:无法导入“app.run”
- angularjs - 如何在没有不同消息的情况下返回所需的消息?
- node.js - 带有锐利的水印