需要头文件afxinet.h
//返回值解析:
// 0:成功下载保存
//- 1:URL不正确
//- 2:建立网络连接失败
//- 3:向服务器发起GET请求失败
//- 4:服务器不接受请求
//- 5:参数一不能为空
//- 6:参数二不能为空
//- 7:保存文件时创建或写入文件失败
INT GetInternetFile(const CString fileUrl,const CString fileName){
if (fileUrl.IsEmpty())
return -5;
unsigned short nPort;//服务器端口号
CString Server, FileObject;
DWORD dwServiceType, dwRet;//服务类型,GET请求的状态号
//解析URL
if (!AfxParseURL(fileUrl, dwServiceType, Server, FileObject, nPort)){
//MessageBox(_T("解析URL失败"));
return -1;
}
//创建网络连接对象,http连接对象指针和用于该连接的文件指针,注意delete
CInternetSession intsess;
CHttpFile * pHtFile = NULL;
//建立连接
CHttpConnection * pHtCon = intsess.GetHttpConnection(Server, nPort);
if (pHtCon == NULL){
intsess.Close();
//MessageBox(_T("建立连接失败"));
return -2;
}
//发起Get请求
pHtFile = pHtCon->OpenRequest(CHttpConnection::HTTP_VERB_GET, FileObject);
if (pHtFile == NULL){
intsess.Close();
delete pHtCon;
pHtCon = NULL;
//MessageBox(_T("Get请求失败"));
return -3;
}
//提交请求
pHtFile->SendRequest();
//获取状态号
pHtFile->QueryInfoStatusCode(dwRet);
if (dwRet != HTTP_STATUS_OK){
intsess.Close();
delete pHtCon;
pHtCon = NULL;
delete pHtFile;
pHtFile = NULL;
//MessageBox(_T("服务器不接受请求"));
return -4;
}
//获取文件大小
UINT nFileLen = (UINT)pHtFile->GetLength();
DWORD dwRead = 1;//用于表示读取的数量
//创建缓冲区
char * szBuffer = new char[nFileLen + 1];
try{
//创建文件,下载文件重命名为fileName
CFile newFile(fileName, CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive);
while (dwRead>0){
memset(szBuffer, 0, (size_t)(nFileLen + 1));
dwRead = pHtFile->Read(szBuffer, nFileLen);
newFile.Write(szBuffer, dwRead);
}
newFile.Close();
delete[]szBuffer;
delete pHtFile;
delete pHtCon;
intsess.Close();
}
catch(CFileException e){
delete[] szBuffer;
delete pHtFile;
delete pHtCon;
intsess.Close();
//MessageBox(_T("文件读写异常"));
return -7;
}
return 0;
}
maven依赖...
两种情况 url经过后端处理,返回的是文件流 url没有经过后端处理,返回的是文件存储地址url 第一种情况: window.open('url') 缺点:会打开一个新的窗口,请求完成后自动关闭,用户体验不是特别好,但是问题不大 <a href="url" download="文件名"></a> 虽然不会打开新弹窗,但是兼容性不好,I...
1.需要参数 remoteFilePath:url地址 fileName:文件名称 2.代码实现...
...
代码: 参考: https://blog.csdn.net/weixin_44779945/article/details/110879030...
方法一: 方法二:(会出现跨域问题) 方法三:不跳转页面,直接下载。最完美!!! 方法四:最简单粗暴,一行代码搞定...
根据URL下载图片 根据URL下载文件 实战测试...
需求是做一个根据文件的url地址下载文件的功能,但是对于大文件来说下载周期较长,等待时间页面无反应,体验不够好,这时候就需要获取到文件的下载进度。查阅了相关资料,这里做一些记录。...
...
已知文件URL;前端实现下载 为了防止打开是预览;采用这样方法下载;直接调用即可;...