【发布时间】:2015-08-26 01:05:32
【问题描述】:
我正在尝试下载图片
客户端 HTML 代码:
$.ajax({
url: 'http://localhost:17308/api/DownloadFile/10272',
type: 'GET',
dataType: 'json',
success: function (data, textStatus, xhr) {
console.log(data);
},
error: function (xhr, textStatus, errorThrown) {
console.log('Error in Database');
}
});
上面的这段代码很好地调用了 Web API,但是我遇到了错误 --> console.log('Error in Database'); (根据我的 console.log 错误:
网页接口
签名
public HttpResponseMessage DownloadFile(long id)
返回码:
result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(path, FileMode.Open);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue(mime);
return result;
- 我是否需要将我的数据类型从 json 更改为其他类型(我假设是这样)
- 还有什么其他方法可以解决此问题?
更新
我正在尝试使用此代码返回一个 jpeg,它使它成功,但 从不 显示图像。
HTML:
<button type="button" id="Download" class="btn btn-primary">Download</button>
<img id="test" alt="test" src="" />
Javascript:
var request = function () {
var ajaxOptions = {};
ajaxOptions.cache = false;
ajaxOptions.url = "/api/DownloadFile/10272";
ajaxOptions.type = "GET";
ajaxOptions.headers = {};
ajaxOptions.headers.Accept = "application/octet-stream"
ajaxOptions.success = function (result) {
console.log("start");
$("#test").attr("src", "data:image/jpg;base64," + result);
console.log("end");
};
ajaxOptions.error = function (jqXHR) {
console.log("found error");
console.log(jqXHR);
};
$.ajax(ajaxOptions);
}
$(function () {
$('#Download').on('click', request);
})
更新 2:
改成这段代码,现在可以工作了
public IHttpActionResult DownloadFile(long id)
{
//code
myBytes = File.ReadAllBytes(path);
return Ok(myBytes);
}
【问题讨论】:
-
您应该查看“数据库”吗?您是否能够调试并查看通过 FileStream 从路径读取图像时会发生什么?还有 mime 的价值是什么?
-
嗯,我很确定这不是数据库问题,mime 是像 56874 这样的字节大小,它转换为大约前 3 个数字的 KB(我相信除以 1024)。它要么是 1. web api 如何处理文件并返回它......要么 2. 返回到 ajax 调用的方式
-
mime 应该代表服务器支持的有效媒体类型。例如新的 MediaTypeHeaderValue("图片/png");对于 png 格式的图像。我不确定你说的
"mime is the byte size like 56874"是否正确。
标签: c# jquery ajax asp.net-web-api asp.net-web-api2