私のモバイル Web アプリケーションでは、ユーザー内に 1 つのページがあり、添付ファイルを表示できます。添付ファイルは、任意のタイプのファイル (jpg、png、txt、doc、zip など) にすることができます。添付ファイルの表示アクションは<a>
、要求を処理する aspx ファイルを指すタグの形式です。
HTML:
<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 にリダイレクトされ、ブラウザ内でファイルを開こうとします。ファイルの種類がサポートされていない場合は、「サファリはこのファイルをダウンロードできません」という警告が表示されます。ファイルの種類がサポートされていても、デフォルトで開かずにダウンロードしたい。
どうすればこの動作を達成できますか?