已成功将原有的飞书图床服务替换为普通的HTTP图床服务,支持无认证的简单HTTP请求进行图片上传和下载。
位置: app/src/main/java/com/android/example/cameraxbasic/http/HttpImageBedService.kt
主要功能:
- 使用
multipart/form-data格式上传图片到POST /upload接口 - 支持 URI 和字节数组两种上传方式
- 自动生成基于时间戳的文件名
- 返回
GET /download/<filename>格式的下载链接 - 提供连接测试功能
位置: app/src/main/java/com/android/example/cameraxbasic/http/HttpImageBedConfig.kt
配置项:
BASE_URL: 图床服务器基础URL(需要修改为实际服务器地址)- 超时时间配置(连接、读取、写入)
- 将
FeishuImageBedService替换为HttpImageBedService - 更新相关的日志信息和错误提示
POST /upload
Content-Type: multipart/form-data
参数:
- file: 图片文件 (multipart field)
响应:
- 成功: HTTP 200,返回任意内容
- 失败: 非200状态码
GET /download/<filename>
响应:
- 成功: HTTP 200,返回图片文件
- 失败: 非200状态码
编辑 HttpImageBedConfig.kt 文件:
object HttpImageBedConfig {
// 修改为你的实际服务器地址
const val BASE_URL = "https://your-image-server.com/api"
}const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
// 配置文件存储
const storage = multer.diskStorage({
destination: 'uploads/',
filename: (req, file, cb) => {
// 使用客户端提供的文件名
cb(null, file.originalname);
}
});
const upload = multer({ storage });
// 上传接口
app.post('/upload', upload.single('file'), (req, res) => {
if (!req.file) {
return res.status(400).json({ error: 'No file uploaded' });
}
res.json({ message: 'Upload successful', filename: req.file.filename });
});
// 下载接口
app.get('/download/:filename', (req, res) => {
const filename = req.params.filename;
const filepath = path.join(__dirname, 'uploads', filename);
res.sendFile(filepath);
});
app.listen(3000, () => {
console.log('图床服务器运行在端口 3000');
});from flask import Flask, request, jsonify, send_from_directory
import os
app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return jsonify({'error': 'No file part'}), 400
file = request.files['file']
if file.filename == '':
return jsonify({'error': 'No selected file'}), 400
filename = file.filename
file.save(os.path.join(UPLOAD_FOLDER, filename))
return jsonify({'message': 'Upload successful', 'filename': filename})
@app.route('/download/<filename>')
def download_file(filename):
return send_from_directory(UPLOAD_FOLDER, filename)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=3000, debug=True)- 格式:
camera_{timestamp}.jpg - 示例:
camera_1640995200000.jpg
- 网络连接失败
- 服务器响应错误
- 文件创建失败
- 详细的日志记录
- 自动清理临时文件
- 正确关闭网络连接
- 使用 Kotlin 协程进行异步上传
- 不阻塞主线程
# 启动本地测试服务器
cd your-server-directory
npm install express multer # Node.js
node server.js
# 或者 Python
pip install flask
python server.pyconst val BASE_URL = "http://10.0.2.2:3000/api" // Android模拟器
// 或
const val BASE_URL = "http://192.168.1.100:3000/api" // 实际设备- 编译并运行Android应用
- 拍照测试上传功能
- 检查logcat日志确认上传状态
应用会输出详细的日志信息:
D/HttpImageBed: 开始上传图片到HTTP图床: content://...
D/HttpImageBed: 开始上传文件: camera_1640995200000.jpg, 大小: 1234567 bytes
I/HttpImageBed: 图片上传成功,响应: {"message":"Upload successful"}
I/HttpImageBed: 图片下载URL: https://your-server.com/api/download/camera_1640995200000.jpg
| 功能 | 飞书图床 | HTTP图床 |
|---|---|---|
| 认证 | 需要App ID/Secret | 无需认证 |
| 上传接口 | /drive/v1/medias/upload_all |
/upload |
| 下载接口 | 需要获取临时链接 | /download/<filename> |
| 文件管理 | 飞书云盘管理 | 服务器文件系统 |
| 依赖 | 飞书开放平台 | 自建服务器 |
- 检查服务器地址是否正确
- 确认服务器是否运行
- 检查网络连接
- 检查服务器上传接口实现
- 确认multipart/form-data格式正确
- 查看服务器日志
- 检查文件是否存在
- 确认下载接口路径正确
- 检查文件权限
这个新的HTTP图床实现更加简单灵活,便于自定义和维护。