0
在我的移動Web應用程序中,我有一個頁面,用戶可以查看附件。 附件可以是任何類型的文件(jpg,png,txt,doc,zip等)。 視圖附件操作的形式爲<a>
標籤,該標籤指向處理請求的aspx文件。
HTML:移動Web應用程序:在iOS上下載附件
<a class="attachBtn" href="_layouts/ViewFile.aspx?messageAttachmentInstanceId={some id}"></a>
ViewFile.aspx:
public partial class ViewFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
System.IO.BinaryWriter bw = null;
System.IO.MemoryStream ms = null;
System.IO.StreamReader sr = null;
try
{
string contentType = string.Empty;
byte[] content = null;
string fileName = string.Empty;
if (!string.IsNullOrEmpty(Request.QueryString["messageAttachmentInstanceId"]) &&
!string.IsNullOrEmpty(Request.QueryString["messageInstanceId"]))
{
int messageInstanceId = Int32.Parse(Request.QueryString["messageInstanceId"]);
Guid attachmentInstanceId;
GuidUtil.TryParse(Request.QueryString["messageAttachmentInstanceId"], out attachmentInstanceId);
MessageInstance messageInstance = WorkflowEngineHttpModule.Engine.GetService<IMessagingService>()
.GetMessageInstance(messageInstanceId);
if (messageInstance != null)
{
MessageAttachmentInstance attachmentInstnace = messageInstance.Attachments[attachmentInstanceId];
contentType = attachmentInstnace.ContentType;
fileName = attachmentInstnace.FileName;
content = attachmentInstnace.Content;
}
}
this.Response.ContentType = contentType;
string headerValue = string.Format("attachment;filename={0}",
this.Server.UrlPathEncode(fileName));
Response.AddHeader("content-disposition", headerValue);
bw = new System.IO.BinaryWriter(this.Response.OutputStream);
bw.Write(content);
}
catch (Exception ex)
{
LogError("ViewFile.aspx, "
+ ex.InnerException, ex);
}
finally
{
if (sr != null)
sr.Close();
if (ms != null)
ms.Close();
if (bw != null)
bw.Close();
}
}
}
問題:
在Android設備中,當用戶點擊附件時,文件被自動下載,這是理想的行爲,因爲用戶可以使用任何他想要的工具打開文件,即使文件類型不受支持,用戶以後可以下載一個工具打開它。
但在iOS設備中文件沒有下載,而是重定向到ViewFile.aspx,並嘗試在瀏覽器中打開文件,如果文件類型不受支持,則顯示警告:「safari無法下載此文件」。 即使支持文件類型,我希望它被下載並且默認情況下不會打開。
我該如何實現這種行爲?
我想我可以住在讓用戶選擇如何打開文件的對話框中。 但沒有對話框... –
不,只有在支持文件時纔會出現對話框。看看這個:https://discussions.apple.com/thread/2798115?start=0&tstart=0 – MartinHN