当前位置:   article > 正文

(五) uni 实现文件预览(解决 IOS端 文件名乱码问题)_uni.opendocument

uni.opendocument

先贴代码

  1. tapDown(fileId) {
  2. const userInfo = this.$apiCache.getUserInfo();
  3. uni.downloadFile({
  4. url: 'http://192.168.100.4:31173/My_OAModule/ResourceFile/downFile?loginMark=' + userInfo.loginMark + '&token=' + userInfo.token + '&data=' + fileId,
  5. success: function(res) {
  6. //安卓端 没有问题
  7. //苹果端 因为下载文件 后台会返回中文下载文件名 IOS 需要 url解码
  8. const filePath = res.tempFilePath; //临时文件路径
  9. //const decodePath = decodeURIComponent(filePath); //解码后路径
  10. //plus.runtime.openFile(filePath);
  11. uni.openDocument({
  12. filePath: filePath,
  13. success: function(res) {
  14. console.log('打开文档成功');
  15. }
  16. });
  17. },
  18. fail: function(err) {
  19. //console.log(err);
  20. }
  21. });
  22. }

 

前台代码就是这样,主要解决方案 放在后台 设置请求头

  1. /// <summary>
  2. /// 普通下载
  3. /// </summary>
  4. /// <param name="FileName">文件虚拟路径</param>
  5. /// /// <param name="name">返回客户端名称</param>
  6. public static void DownLoadold(string FileName, string name)
  7. {
  8. string destFileName = FileName;
  9. if (File.Exists(destFileName))
  10. {
  11. FileInfo fi = new FileInfo(destFileName);
  12. HttpContext.Current.Response.Clear();
  13. HttpContext.Current.Response.ClearHeaders();
  14. HttpContext.Current.Response.Buffer = false;
  15. //这段代码在IOS 浏览器下载时候 会出现 文件名乱码
  16. //HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));
  17. //主要代码这里设置头信息
  18. StringBuilder headerValue = new StringBuilder();
  19. headerValue.Append("attachment;");
  20. headerValue.Append(" filename=\"" + encodeURIComponent(name) + "\";");
  21. headerValue.Append(" filename*=utf-8''" + encodeURIComponent(name));
  22. HttpContext.Current.Response.AppendHeader("Content-Disposition", headerValue.ToString());
  23. HttpContext.Current.Response.AppendHeader("Content-Length", fi.Length.ToString());
  24. HttpContext.Current.Response.ContentType = "application/octet-stream";
  25. HttpContext.Current.Response.WriteFile(destFileName);
  26. HttpContext.Current.Response.Flush();
  27. HttpContext.Current.Response.End();
  28. }
  29. }
  30. /// <summary>
  31. /// 符合 RFC 3986 标准的“百分号URL编码”在这个方法里,空格会被编码成%20,而不是+和浏览器的encodeURIComponent行为一致
  32. /// </summary>
  33. /// <param name="value"></param>
  34. /// <returns></returns>
  35. private static string encodeURIComponent(string value)
  36. {
  37. try
  38. {
  39. return HttpUtility.UrlEncode(value, Encoding.UTF8).Replace("\\+", "%20");
  40. }
  41. catch (Exception ex)
  42. {
  43. HttpContext.Current.Response.Write("Error:" + ex.Message);
  44. return null;
  45. }
  46. }

搞了一下午 总结下

大致原因就是 苹果设备自带浏览器 与 windows上面的浏览器的解析编码不一致,你也可以在苹果端下载个360 或者其他浏览器试试

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号