1

私は、任意のドキュメント (主に .docx、.doc、.pdf) のアップロード/ダウンロードを可能にするこの WebService を取得しました。それが返すのはbyte[]、ダウンロードを照会するときだけです。

私はこのコードを書きました

 string ContractGUID = dtContract.Rows[0]["ContractGUID"].ToString();

 //Get Bytes from WebService
 byte[] fileData = BLL.Contract.GetDocument(new Guid(ContractGUID));
 Response.Clear();
 Response.BinaryWrite(fileData);
 Response.AddHeader("Content-Disposition", "Attachment");
 Response.Flush();

WebService が公開するその他のメソッドはGetDocumentNameGetDocumentLen

Mime-Type を特定したり、ブラウザーに正しい形式でダウンロードさせることはできますか? 現在.htm、Chrome のようにダウンロードしています。開くと、変な文字が表示されます。より良いアドバイスはありますか?

ありがとう。

4

2 に答える 2

1

ブラウザはファイル名を介してそれを行うと思います。

例えば:

response.Clear();
response.AddHeader("Content-Disposition", "attachment; filename=" + dbFile.filename.Replace(" ", "_"));
response.AddHeader("Content-Length", dbFile.data.Length.ToString());
response.ContentType = "application/octet-stream";
response.OutputStream.Write(dbFile.data, 0, dbFile.data.Length);
response.End();

dbFile.filename は文字列です

dbFile.data は byte[] です

于 2012-09-05T13:59:57.887 に答える
1

いいえ、Content-Type ヘッダーを介して通知せずに、ブラウザに正しい形式でダウンロードさせることはできません。

Response.ContentType = "application/pdf"; //or whatever appropriate

Web サービスがGetDocumentName()メソッドを公開している場合、名前にファイル拡張子が付いていると仮定して、名前を調べて適切な形式を推測できます。ファイルの拡張子を任意のものに変更できるため、これは明らかに防弾ではありません。

もう 1 つの方法は、最初のバイトを調べてファイル形式を推測することです。たとえば、ファイルの最初の 4 バイトが次の場合、25 50 44 46これは PDF ファイルである可能性が非常に高くなります。このウェブサイトには、かなり広範なリストがあります。

可能な content-type ヘッダーのリストを次に示します。

于 2012-09-05T14:03:00.037 に答える