$.ajax
は、テキスト応答を処理し、しようとしますMediaTypeHeaderValue.TryParse
メソッドを使用することができます(UTF-8)は、コンテンツをデコード:zipファイルISN」をtテキスト、あなたは破損したコンテンツを取得します。 jQueryはバイナリコンテンツをサポートしていないので、thisリンクを使用し、jQueryでajaxトランスポートを追加するか、XmlHttpRequestを直接使用する必要があります。 xhrの場合、xhr.responseType = "blob"
と設定し、xhr.response
からBLOBを読み取る必要があります。生のXMLHttpRequestと
// with xhr.responseType = "arraybuffer"
var arraybuffer = xhr.response;
var blob = new Blob([arraybuffer], {type:"application/zip"});
saveAs(blob, "example.zip");
// with xhr.responseType = "blob"
var blob = xhr.response;
saveAs(blob, "example.zip");
Edit: examples:
jquery.binarytransport.jsと
(あなたがBLOBまたはArrayBufferをダウンロードしてみましょう任意のライブラリが行います)
$.ajax({
url: url,
type: "POST",
contentType: "application/json",
dataType: "binary", // to use the binary transport
// responseType:'blob', this is the default
data: data,
processData: false,
success: function (blob) {
// the result is a blob, we can trigger the download directly
saveAs(blob, "example.zip");
}
// [...]
});
、あなたがthisの質問を参照することができ、あなただけにxhr.responseType = "blob"
を追加する必要がありますブロブを取得します。
私個人的には非常に簡単です、jQueryの上のAJAXトランスポートを使用するようにあなたをお勧めします、あなたは、ライブラリをダウンロードし、プロジェクトに含めると記述する必要があります:dataType: "binary".
これはDotNetZipを使用して、APIコードです(Ionic.Zip
):ここでは
[HttpPost]
public HttpResponseMessage ZipDocs([FromBody] string[] docs)
{
using (ZipFile zip = new ZipFile())
{
//this code takes an array of documents' paths and Zip them
zip.AddFiles(docs, false, "");
return ZipContentResult(zip);
}
}
protected HttpResponseMessage ZipContentResult(ZipFile zipFile)
{
var pushStreamContent = new PushStreamContent((stream, content, context) =>
{
zipFile.Save(stream);
stream.Close();
}, "application/zip");
return new HttpResponseMessage(HttpStatusCode.OK) { Content = pushStreamContent };
}
あなたのjavascriptコードを表示してください。代わりにResponseMessage(result)を返そうとしましたか? –
@RicardoPontual更新を参照してください。 ResponseMessage(result)を使用していませんでした。 –
@RicardoPontual result.Content.Headers.ContentTypeの代わりに使用する必要がありますか? –