对接对象存储-本地文件
提供临时存储图片/视频服务
API接口稳定可用 · 支持高并发请求
总调用次数: 加载中...
API接口信息
接口地址
https://yutangxiaowu.cn:3005/upload/file
请求方法
POST
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| file | file | 必填 | 本地绝对url/file |
| bucketName | string | 可选 | 默认sdk(可不填),更多添加群聊了解 |
响应格式
JSON
响应参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| url | string | 对象存储url |
| key | string | 文件名 |
代码示例
JavaScript (Axios)
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const formData = new FormData();
formData.append('file', fs.createReadStream('本地文件绝对路径'));
formData.append('bucketName', 'sdk');
axios.post('https://yutangxiaowu.cn:3005/upload/file', formData, {
headers: {
...formData.getHeaders()
}
})
.then(response => {
console.log('上传结果:', response.data);
})
.catch(error => {
console.error('上传出错:', error.message);
});
JavaScript (Fetch)
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
alert('请选择文件');
return;
}
const formData = new FormData();
formData.append('file', file);
formData.append('bucketName', 'sdk');
fetch('https://yutangxiaowu.cn:3005/upload/file', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log('上传结果:', data);
})
.catch(error => {
console.error('上传出错:', error);
});
HTML (JavaScript)
<!DOCTYPE html>
<html>
<body>
<input type="file" id="fileInput">
<button onclick="uploadFile()">上传文件</button>
<script>
async function uploadFile() {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
alert('请选择文件');
return;
}
const formData = new FormData();
formData.append('file', file);
formData.append('bucketName', 'sdk');
try {
const response = await fetch('https://yutangxiaowu.cn:3005/upload/file', {
method: 'POST',
body: formData
});
const result = await response.json();
console.log('上传结果:', result);
alert('上传成功: ' + JSON.stringify(result));
} catch (error) {
console.error('上传失败:', error);
alert('上传失败: ' + error.message);
}
}
</script>
</body>
</html>
Node.js (Fetch)
const FormData = require('form-data');
const fs = require('fs');
const fetch = require('node-fetch');
const formData = new FormData();
formData.append('file', fs.createReadStream('本地文件绝对路径'));
formData.append('bucketName', 'sdk');
fetch('https://yutangxiaowu.cn:3005/upload/file', {
method: 'POST',
body: formData,
headers: formData.getHeaders()
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
Python
import requests
file_path = '本地文件绝对路径'
with open(file_path, 'rb') as file:
form_data = {
'file': file,
'bucketName': (None, 'sdk')
}
response = requests.post(
'https://yutangxiaowu.cn:3005/upload/file',
files=form_data
)
print('上传结果:', response.json())
PHP
new CURLFile($filePath),
'bucketName' => 'sdk'
];
curl_setopt($curl, CURLOPT_URL, $apiUrl);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$data = json_decode($response, true);
print_r($data);
curl_close($curl);
?>
Java
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
public class FileUpload {
public static void main(String[] args) {
String apiUrl = "https://yutangxiaowu.cn:3005/upload/file";
String filePath = "本地文件绝对路径";
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(apiUrl);
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
File file = new File(filePath);
builder.addBinaryBody(
"file",
file,
ContentType.APPLICATION_OCTET_STREAM,
file.getName()
);
builder.addTextBody("bucketName", "sdk", ContentType.TEXT_PLAIN);
HttpEntity multipart = builder.build();
httpPost.setEntity(multipart);
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
HttpEntity responseEntity = response.getEntity();
String result = EntityUtils.toString(responseEntity);
System.out.println("上传结果: " + result);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
C#
using System;
using System.Net.Http;
using System.Threading.Tasks;
class FileUploader {
static async Task Main() {
string apiUrl = "https://yutangxiaowu.cn:3005/upload/file";
string filePath = "本地文件绝对路径";
using var httpClient = new HttpClient();
using var formData = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filePath));
formData.Add(fileContent, "file", System.IO.Path.GetFileName(filePath));
formData.Add(new StringContent("sdk"), "bucketName");
var response = await httpClient.PostAsync(apiUrl, formData);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine("上传结果: " + result);
}
}
Ruby
require 'net/http'
require 'uri'
require 'multipart/post'
api_url = 'https://yutangxiaowu.cn:3005/upload/file'
file_path = '本地文件绝对路径'
uri = URI.parse(api_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path)
begin
file = File.open(file_path, 'rb')
params = {
'file' => UploadIO.new(file, 'application/octet-stream', File.basename(file_path)),
'bucketName' => 'sdk'
}
request.set_form(params, 'multipart/form-data')
response = http.request(request)
puts "上传结果: #{response.body}"
ensure
file.close
end
Go
package main
import (
"fmt"
"io"
"net/http"
"os"
"mime/multipart"
"bytes"
)
func main() {
apiUrl := "https://yutangxiaowu.cn:3005/upload/file"
filePath := "本地文件绝对路径"
var requestBody bytes.Buffer
writer := multipart.NewWriter(&requestBody)
file, err := os.Open(filePath)
if err != nil {
panic(err)
}
defer file.Close()
part, err := writer.CreateFormFile("file", file.Name())
if err != nil {
panic(err)
}
io.Copy(part, file)
writer.WriteField("bucketName", "sdk")
writer.Close()
request, err := http.NewRequest("POST", apiUrl, &requestBody)
if err != nil {
panic(err)
}
request.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
response, err := client.Do(request)
if err != nil {
panic(err)
}
defer response.Body.Close()
responseBody, _ := io.ReadAll(response.Body)
fmt.Println("上传结果:", string(responseBody))
}
Swift
import Foundation
let apiUrl = URL(string: "https://yutangxiaowu.cn:3005/upload/file")!
let filePath = "本地文件绝对路径"
let fileUrl = URL(fileURLWithPath: filePath)
var request = URLRequest(url: apiUrl)
request.httpMethod = "POST"
let boundary = UUID().uuidString
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var data = Data()
data.append("--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"bucketName\"\r\n\r\n".data(using: .utf8)!)
data.append("sdk\r\n".data(using: .utf8)!)
if let fileData = try? Data(contentsOf: fileUrl) {
let fileName = fileUrl.lastPathComponent
data.append("--\(boundary)\r\n".data(using: .utf8)!)
data.append("Content-Disposition: form-data; name=\"file\"; filename=\"\(fileName)\"\r\n".data(using: .utf8)!)
data.append("Content-Type: application/octet-stream\r\n\r\n".data(using: .utf8)!)
data.append(fileData)
data.append("\r\n".data(using: .utf8)!)
}
data.append("--\(boundary)--\r\n".data(using: .utf8)!)
request.httpBody = data
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
print(String(data: data, encoding: .utf8)!)
}
}
task.resume()
Kotlin
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.asRequestBody
import java.io.File
fun main() {
val apiUrl = "https://yutangxiaowu.cn:3005/upload/file"
val filePath = "本地文件绝对路径"
val file = File(filePath)
val client = OkHttpClient()
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file",
file.name,
file.asRequestBody("application/octet-stream".toMediaTypeOrNull())
)
.addFormDataPart("bucketName", "sdk")
.build()
val request = Request.Builder()
.url(apiUrl)
.post(requestBody)
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw Exception("请求失败: ${response.code}")
println("上传结果: ${response.body?.string()}")
}
}
在线测试工具
未选择文件
支持图片和视频格式,文件大小不超过10MB