HTML5 文件域+FileReader 读取文件并上传到服务器(三)

╰半橙微兮° 2024-02-18 21:24 118阅读 0赞

一、读取文件为blob并上传到服务器

HTML

  1. <div class="container">
  2. <!--读取要上传的文件-->
  3. <input type="file" id="file" />
  4. <input type="button" id="btn1" value="点击上传" onclick="uploadClick();" />
  5. </div>

JS

复制代码

  1. //读取图片实例,并上传到服务器
  2. var fileBox = document.getElementById('file');
  3. fileBox.onchange = function () {
  4. //获取选择文件的数组
  5. var fileList = fileBox.files;
  6. for (var i = 0; i < fileList.length; i++) {
  7. var file = fileList[i];
  8. uploadFile(file);
  9. }
  10. }
  11. //关键代码上传到服务器
  12. function uploadFile(file) {
  13. var reader = new FileReader();
  14. reader.readAsArrayBuffer(file);
  15. reader.onload = function () {
  16. var blob = new Blob([reader.result]);
  17. //提交到服务器
  18. var fd = new FormData();
  19. fd.append('file', blob);
  20. var ext = file.name.substring(file.name.lastIndexOf('.'));
  21. fd.append('extention', ext);
  22. fd.append('maxsize', 1024*1024*4);//Asp.net 默认一次上传最大4MB
  23. fd.append('isClip', -1);
  24. var xhr = new XMLHttpRequest();
  25. xhr.open('post', '../ashx/upload.ashx', true);
  26. xhr.onreadystatechange = function () {
  27. if (xhr.readyState == 4 && xhr.status == 200) {
  28. var data = eval('(' + xhr.responseText + ')');
  29. console.info(data);
  30. if (data.success) {
  31. //上传成功
  32. var imgName = data.msg;
  33. alert(imgName);
  34. } else {
  35. alert(data.msg);
  36. }
  37. }
  38. }
  39. //开始发送
  40. xhr.send(fd);
  41. }
  42. }

复制代码

后台C#处理关键代码:

复制代码

  1. //接收文件
  2. HttpRequest req = _Context.Request;
  3. string newname = _fileInfo.CreateNewName(newExtention);
  4. //接收二级制数据并保存
  5. Stream stream = _PostedFile.InputStream;
  6. byte[] dataOne = new byte[stream.Length];
  7. stream.Read(dataOne, 0, dataOne.Length);
  8. FileStream fs = new FileStream(_fileInfo.TempFile + newname, FileMode.Create, FileAccess.Write);
  9. try
  10. {
  11. fs.Write(dataOne, 0, dataOne.Length);
  12. }
  13. finally
  14. {
  15. fs.Close();
  16. stream.Close();
  17. }
  18. return newname;

复制代码

二、读取图片文件,并上传到服务器

HTML

复制代码

  1. <div class="container">
  2. <!--图片类型验证方法1-->
  3. <input type="file" id="file" accept="image/*" />
  4. <input type="button" id="btn1" value="点击上传" onclick="uploadClick();" />
  5. <h4>选择文件如下:</h4>
  6. <img src="" id="img1" />
  7. </div>

复制代码

JS:

复制代码

  1. //读取图片实例,并上传到服务器
  2. var fileBox = document.getElementById('file');
  3. fileBox.onchange = function () {
  4. //获取选择文件的数组
  5. var fileList = fileBox.files;
  6. for (var i = 0; i < fileList.length; i++) {
  7. var file = fileList[i];
  8. //图片类型验证第二种方式
  9. if (/image\/\w+/.test(file.type))
  10. readFile(file);
  11. else
  12. console.log(file.name + ':不是图片');
  13. }
  14. }
  15. //读取二进制图片文件,并上传到服务器
  16. function uploadClick() {
  17. var fileList = fileBox.files;
  18. for (var i = 0; i < fileList.length; i++) {
  19. var file = fileList[i];
  20. //图片类型验证第二种方式
  21. if (/image\/\w+/.test(file.type))
  22. uploadFile(file);
  23. else
  24. console.log(file.name + ':不是图片');
  25. }
  26. }
  27. //关键代码上传到服务器
  28. function uploadFile(file) {
  29. var reader = new FileReader();
  30. reader.readAsArrayBuffer(file);
  31. reader.onload = function () {
  32. var blob = new Blob([reader.result], { type: 'image/jpg' });
  33. //提交到服务器
  34. var fd = new FormData();
  35. fd.append('file', blob);
  36. var ext = file.name.substring(file.name.lastIndexOf('.'));
  37. fd.append('extention', ext);
  38. fd.append('isClip', -1);
  39. var xhr = new XMLHttpRequest();
  40. xhr.open('post', '../ashx/upload.ashx', true);
  41. xhr.onreadystatechange = function () {
  42. if (xhr.readyState == 4 && xhr.status == 200) {
  43. var data = eval('(' + xhr.responseText + ')');
  44. console.info(data);
  45. if (data.success) {
  46. //上传成功
  47. var imgName = data.msg;
  48. alert(imgName);
  49. } else {
  50. alert(data.msg);
  51. }
  52. }
  53. }
  54. //开始发送
  55. xhr.send(fd);
  56. }
  57. }
  58. //读取图片内容 为DataURL
  59. function readFile(file) {
  60. var reader = new FileReader();
  61. reader.readAsDataURL(file);
  62. reader.onload = function (e) {
  63. var result = reader.result;
  64. $('.container blockquote').text(result);
  65. $('#img1').attr('src', result)
  66. }
  67. }

复制代码

后台关键代码处理同上。

发表评论

表情:
评论列表 (有 0 条评论,118人围观)

还没有评论,来说两句吧...

相关阅读