C\#서버 이미지 패키지 다운로드 구현 코드 분석
1.텐 센트 클 라 우 드 등 자원 서버 의 그림 을 가 져 오 려 면
2.원 격 그림 을 로 컬 임시 폴 더 로 끌 어 옵 니 다.
3.임시 폴 더 를 압축 합 니 다.
4,압축 완료 임시 폴 더 삭제,
5.압축 이 끝 난 사용자 에 게 되 돌려 줍 니 다.
6.사용 자 는 인 터 페 이 스 를 다운로드 요청 하고 다운로드 가 끝 난 후에 압축 패 키 지 를 삭제 합 니 다.
둘째,다음 코드,ImageUtil
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
namespace Common
{
/// <summary>
///
/// System.IO.Compression.FileSystem
/// System.IO.Compression
/// </summary>
public static class ImageUtil
{
#region
/// <summary>
/// ,
/// </summary>
/// <param name="urlList"> </param>
/// <param name="curDirName"> </param>
/// <param name="curFileName"> </param>
/// <returns></returns>
public static bool ImagePackZip(List<string> urlList, string curDirName, string curFileName)
{
return CommonException(() =>
{
//1.
if (!Directory.Exists(curDirName))
Directory.CreateDirectory(curDirName);
//2.
foreach (var url in urlList)
{
DownPicToLocal(url, curDirName + "\\");
Thread.Sleep(60);// ,
}
//3.
if (!File.Exists(curFileName))
ZipFile.CreateFromDirectory(curDirName, curFileName); //
// ,
Task.Run(() =>
{
if (Directory.Exists(curDirName))
Directory.Delete(curDirName, true);
});
return true;
});
}
/// <summary>
///
/// </summary>
/// <param name="targetfile"> </param>
/// <param name="filename"> </param>
public static bool DownePackZip(string targetfile, string filename)
{
return CommonException(() =>
{
FileInfo fileInfo = new FileInfo(targetfile);
HttpResponse rs = System.Web.HttpContext.Current.Response;
rs.Clear();
rs.ClearContent();
rs.ClearHeaders();
rs.AddHeader("Content-Disposition", "attachment;filename=" + $"{filename}");
rs.AddHeader("Content-Length", fileInfo.Length.ToString());
rs.AddHeader("Content-Transfer-Encoding", "binary");
rs.AddHeader("Pragma", "public");// https cache
rs.AddHeader("Cache-Control", "max-age=0");
rs.ContentType = "application/octet-stream";
rs.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
rs.WriteFile(fileInfo.FullName);
rs.Flush();
rs.End();
return true;
});
}
/// <summary>
///
/// </summary>
/// <param name="url"></param>
public static bool DownPicToLocal(string url, string localpath)
{
return CommonException(() =>
{
string fileprefix = DateTime.Now.ToString("yyyyMMddhhmmssfff");
var filename = $"{fileprefix}.jpg";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 60000;
WebResponse response = request.GetResponse();
using (Stream reader = response.GetResponseStream())
{
FileStream writer = new FileStream(localpath + filename, FileMode.OpenOrCreate, FileAccess.Write);
byte[] buff = new byte[512];
int c = 0; //
while ((c = reader.Read(buff, 0, buff.Length)) > 0)
{
writer.Write(buff, 0, c);
}
writer.Close();
writer.Dispose();
reader.Close();
reader.Dispose();
}
response.Close();
response.Dispose();
return true;
});
}
/// <summary>
///
/// </summary>
/// <param name="func"></param>
/// <returns></returns>
private static bool CommonException(Func<bool> func)
{
try
{
return func.Invoke();
}
catch (Exception ex)
{
return false;
}
}
#endregion
}
}
3.테스트 MVC 코드
using Common;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web.Mvc;
namespace PackImageZip.Controllers
{
public class HomeController : Controller
{
private static object obj = new object();
public ActionResult Contact()
{
/// , ,
lock (obj)
{
var DownPicpath = System.Web.HttpContext.Current.Server.MapPath("/DownPicPackge");//
string curFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".zip";
/// ,
Thread.Sleep(2000);
////
string curDirName = $"/{DateTime.Now.ToString("yyyyMMddHHmmssfff")}/";
List<string> urlList = new List<string>();
urlList.Add("https://cdn.duitang.com/uploads/item/201409/08/20140908155026_RdUwH.thumb.700_0.jpeg");
urlList.Add("https://cdn.duitang.com/uploads/item/201409/08/20140908155026_RdUwH.thumb.700_0.jpeg");
urlList.Add("https://cdn.duitang.com/uploads/item/201409/08/20140908155026_RdUwH.thumb.700_0.jpeg");
urlList.Add("https://cdn.duitang.com/uploads/item/201409/08/20140908155026_RdUwH.thumb.700_0.jpeg");
var isOk = ImageUtil.ImagePackZip(urlList, DownPicpath + curDirName, $"{DownPicpath}/{curFileName}");
var json = JsonConvert.SerializeObject(new { isok = isOk.ToString(), curFileName = curDirName });
return Content(json);
}
}
/// <summary>
///
/// </summary>
/// <param name="curFileName"> </param>
/// <returns></returns>
public ActionResult DownePackZip(string curFileName)
{
try
{
curFileName = curFileName + ".zip";
var DownPicpath = System.Web.HttpContext.Current.Server.MapPath("/DownPicPackge");
var flag = ImageUtil.DownePackZip(DownPicpath + "/" + curFileName, curFileName);
////flag , ,
if (flag && Directory.Exists(DownPicpath))
System.IO.File.Delete(DownPicpath + "/" + curFileName);
return Content(flag.ToString());
}
catch (Exception ex)
{
return Content(ex.Message);
}
}
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.