根据URL下载文件

本文介绍了一种使用Java从网络下载文件的方法,并详细展示了如何通过URL连接获取资源并保存到本地的过程。代码中实现了进度跟踪及异常处理。

public String downloadNet(String downUrl, String file1) throws MalformedURLException {
		// 下载网络文件
		String path = "";
		int bytesum = 0;
		int byteread = 0;
		String packages = extractString(downUrl);
		String saveFileName = String.valueOf(System.currentTimeMillis()) + Math.round(Math.random() * 100000);

		URL url = new URL(downUrl);
		try {
			URLConnection conn = url.openConnection();
			InputStream inStream = conn.getInputStream();
			FileOutputStream	 fs = new FileOutputStream(file1 + File.separator + saveFileName + ".apk");
			path=file1+saveFileName  + ".apk";
			byte[] buffer = new byte[1204];
			int length;
			while ((byteread = inStream.read(buffer)) != -1) {
				bytesum += byteread;
				System.out.println(bytesum);
				fs.write(buffer, 0, byteread);
			}
			if(null!=fs){
				try {
					fs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return path;
	}

### ### 在 UniApp 中根据 URL 下载文件的实现方式 在 UniApp 中,根据不同平台(H5、小程序、App)的特性,下载文件的方式有所不同。以下是几种常见的实现方法。 #### 使用 `uni.downloadFile` 接口下载文件 UniApp 提供了 `uni.downloadFile` 接口用于从指定 URL 下载文件,并支持监听下载进度。该接口适用于 H5 和 App 平台,但在小程序中只能将文件保存到本地缓存路径,不能直接触发浏览器下载行为。 ```javascript uni.downloadFile({ url: 'https://example.com/sample.pdf', success: (res) => { if (res.statusCode === 200) { console.log('文件下载成功', res.tempFilePath); // 可以通过 uni.saveFile 保存到本地 } } }); ``` 该方法适用于从远程服务器获取文件流并进行后续处理的情况[^1]。 #### H5 页面中触发浏览器下载行为 在 H5 环境下,若希望用户点击后直接下载文件而不是预览,可以通过创建 `<a>` 标签并设置 `download` 属性来实现: ```javascript function downloadFromUrl(url, filename) { const link = document.createElement('a'); link.href = url; link.download = filename; document.body.appendChild(link); link.click(); document.body.removeChild(link); } ``` 此方法可有效控制浏览器弹出下载对话框,适用于图片、PDF、Office 文档等资源的下载[^1]。 #### 处理二进制文件流(Blob) 当请求返回的是二进制文件流时,可以使用 `uni.request` 获取数据,并将其转换为 Blob 对象,再通过 `URL.createObjectURL` 创建临时地址供下载: ```javascript uni.request({ url: 'https://api.example.com/download', responseType: 'arraybuffer', success: (res) => { const blob = new Blob([res.data], { type: 'application/pdf' }); const url = URL.createObjectURL(blob); downloadFromUrl(url, 'sample.pdf'); } }); ``` 这种方式适用于后台返回文件流数据,前端需要解析并触发下载的场景[^1]。 #### 小程序平台的限制与替代方案 在小程序环境中,如微信小程序,无法直接调用浏览器下载功能。通常的做法是将文件下载至本地缓存路径,然后引导用户手动打开或分享保存: ```javascript uni.downloadFile({ url: 'https://example.com/sample.docx', success: (res) => { uni.saveFile({ tempFilePath: res.tempFilePath, success: (saveRes) => { console.log('文件已保存至:', saveRes.savedFilePath); } }); } }); ``` 由于平台限制,部分操作可能需要用户授权或依赖特定组件(如 WebView)展示文件内容。 #### 文件类型兼容性处理 对于 PDF、Word、Excel、PPT 等文档格式,在 H5 环境中建议结合后端生成下载链接或使用在线预览服务。若需本地保存,应确保文件扩展名正确以便系统识别和关联应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值