1. Primeiro, implemente o upload de arquivos grandes . Se for alguns megabytes ou dezenas de megabytes, use o método de upload básico, mas se for um upload de arquivo grande, é melhor usar o upload Shard. Aqui, uso principalmente o cliente para ler os dados sharded no segmento do servidor e, em seguida, salvá -los. Depois que o segmento do servidor é lido, os dados sharded são combinados.
2. O código front-end é o seguinte:
< %@ Página linguagem = "c#" autoeventwireup = "true" codeBehind = "uploadtest2.aspx.cs" herits = "html5Uploadtest.uploadtest2" %> <html lang = "zh-cn"> <oward> <meta charset = "utf-88"> fragmentos </ititle> <script src = "scripts/jQuery-1.8.2.js"> </script> <link href = "bootstrap-progressbar/bootstrap-progressBar-3.3.4.css" rel = "styleSheet"/> <script <script src = "bootstrap-progressbar/bootstrap-progressbar.js"> </script> <%-<link href = "jQueryui/jQuery-ui.css" rel = "stylesheet"/> <cript src = "jQueryui/jQuery-Ui.JS" {$ ("#upload"). att ("desativado", "desativado"); var file = $ ("#file") [0] .Files [0], // arquivo objeto filenum = $ ("#file") [0]. shardcount = math.ceil (tamanho / shardsize); // Número total de fatias $ ('. Progresso .Progress-Bar'). Att ('Data-transitionGoal', 0) .ProgressBar ({Display_Text: 'Fill'}); para (var i = 0; i <shardcount; ++ i) {// calcula as posições iniciais e finais de cada slice var start = i * * Um formulário, formData é um novo formulário VAR adicionado ao HTML5. = new FormData (); form.append ("dados", file.slice (start, fim)); // O método de fatia é usado para cortar parte do formulário de arquivo.append ("nome", nome); form.Append ("Total", ShardCount); // Número total de fatias Form.Append ("Index", I + 1); //The current number of slices is //Ajax submits $.ajax({url: "Upload.ashx", type: "POST",data: form, async: true, //Async processData: false, //It's very important to tell jquery not to process form contentType: false, //It's very important to specify as false to form the correct Content-Typesuccess: function () {++ ter sucesso; $ ("#output"). Texto (sucesso + " /" + shardcount); var porcentagem = ((sucesso / shardcount) .tofixed (2)) * 100; updateProgress (porcent); »° (sDECED == shardCount) {$ ("##»upload). RemovetTtr (" {var ProgressBarWidth = porcentagem * $ element.width ()/100; $ element.find ('div'). Animate ({width: progressbarwidth}, 500) .html (porcent + "%");} // $ (document). }); //}); função updateProgress (porcentagem) {$ ('. Progress .Progress-Bar'). Att ('Data-transitionGoal', porcentagem) .ProgressBar ({display_text: 'preenchimento'});} </script> </head> <dod> <bloft typing = "FILHE '}); ONCLICK = "UPLOPLEFILE ();"> upload </button> <span id = "output" style = "font-size: 12px"> waiting </span> <div> <div id = "ProgressBar" role = "ProgressBar" Data-transiçãoGeal = ""> </div> </div> </body> </html>3. Os procedimentos gerais de processamento de fundo são os seguintes:
usando o sistema; usando o System.Collection.Genic; usando o System.io; usando o System.linq; usando o System.web; namespace html5Uploadtest {/// <summary> /// resumo Descrição para upload /////s Summary> public class upload: ihttxtTxtTrT {Public ProscostRestPestPen (HtyTerPoTPETPELTETPETPELTETETPETPELTETPELTETPELTETPETPELTETPETPELTEPT (HTTELTY). "Texto/simples"; tente {// Escolha os parâmetros da solicitação, observe que o arquivo carregado é string no request.Files name = context.request ["nome"]; int total = convert.toint32 (context.request ["total"]); string dir = context.Request.MapPath("~/temp");string file = Path.Combine(dir, name + "_" + index);data.SaveAs(file);//If it is already the last shard, combine//Of course you can also use other methods such as directly writing to the corresponding location of the final file when receiving each shard, but you must control the concurrency to prevent file lock conflicts if (index == total){file = Path.combine (dir, nome); // byte [] bytes = null; usando (filestream fs = new FileStream (arquivo, filemode.openorcreate)) {for (int i = 1; i <= total; ++ i) {string parte = path.combine (dir, nome + "_" + i); // bytes = system.io.file.readbytes (part) // fs.ite (byts = system.io.file.readbytes (part) //); null;System.IO.File.Delete(part);fs.Close();}}}}}catch (Exception){throw;}//Return whether it is successful, simplified processing is done here //return Json(new { Error = 0 });}public bool IsReusable{get{return false;}}}}4. É claro que o plano de fundo também precisa de algum manuseio de exceção ou falta de energia e transmissão a ser continuada. . .
O exposto acima é o código de exemplo de barra de progresso do bootstrap que eu apresentei a você. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!