removed tinyurl logic added support for new short code logic

This commit is contained in:
2025-04-14 21:37:18 -04:00
parent efa32f2831
commit 45dc412cb7
12 changed files with 653 additions and 33 deletions

205
MOBILE.md Normal file
View File

@@ -0,0 +1,205 @@
# Mobile Integration Guide
This document outlines the requirements for mobile applications to integrate with the Simple File Upload Server.
## API Endpoints
### Upload File
**Endpoint:** `POST /upload`
**Content-Type:** `multipart/form-data`
**Request Parameters:**
```
file: File (required) - The file to upload
max_downloads: Integer (optional) - Maximum number of downloads allowed (default: 1)
expiry_hours: Integer (optional) - Hours until file expires (default: 24, max: 24)
```
**Example Request (Swift):**
```swift
let url = URL(string: "http://your-server:7777/upload")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let boundary = "Boundary-\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = Data()
// Add file data
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"log.txt\"\r\n")
body.append("Content-Type: text/plain\r\n\r\n")
body.append(fileData)
body.append("\r\n")
// Add parameters
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"max_downloads\"\r\n\r\n")
body.append("3\r\n")
body.append("--\(boundary)\r\n")
body.append("Content-Disposition: form-data; name=\"expiry_hours\"\r\n\r\n")
body.append("24\r\n")
body.append("--\(boundary)--\r\n")
request.httpBody = body
```
**Example Request (Kotlin):**
```kotlin
val file = File("log.txt")
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file",
file.name,
file.asRequestBody("application/octet-stream".toMediaType())
)
.addFormDataPart("max_downloads", "3")
.addFormDataPart("expiry_hours", "24")
.build()
val request = Request.Builder()
.url("http://your-server:7777/upload")
.post(requestBody)
.build()
```
**Success Response:**
```json
{
"code": "ABC123"
}
```
**Error Responses:**
```json
{
"error": "No file part"
}
```
Status: 400 Bad Request
```json
{
"error": "No selected file"
}
```
Status: 400 Bad Request
### Download File
**Endpoint:** `GET /download/{code}`
**Parameters:**
- `code`: 6-character alphanumeric code received from upload
**Example Request (Swift):**
```swift
let code = "ABC123"
let url = URL(string: "http://your-server:7777/download/\(code)")!
let task = URLSession.shared.downloadTask(with: url) { localURL, response, error in
guard let localURL = localURL else { return }
// Handle downloaded file
}
task.resume()
```
**Example Request (Kotlin):**
```kotlin
val code = "ABC123"
val request = Request.Builder()
.url("http://your-server:7777/download/$code")
.get()
.build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
// Handle downloaded file
}
override fun onFailure(call: Call, e: IOException) {
// Handle error
}
})
```
**Success Response:**
- Status: 200 OK
- Content-Type: application/octet-stream
- Content-Disposition: attachment; filename="original_filename.ext"
**Error Responses:**
- Status: 404 Not Found
- Content-Type: application/json
Various error messages:
```json
{
"error": "Invalid or expired code"
}
```
```json
{
"error": "File expired"
}
```
```json
{
"error": "Download limit reached"
}
```
```json
{
"error": "File not found"
}
```
## Implementation Requirements
### File Upload
1. Implement proper error handling for network issues
2. Show upload progress to user
3. Handle timeout scenarios (recommended timeout: 60 seconds)
4. Store received code securely if needed
5. Validate file size before upload (max size: 16MB)
6. Implement retry logic for failed uploads
### File Download
1. Handle all error scenarios gracefully
2. Show download progress to user
3. Validate downloaded file integrity
4. Implement proper file saving logic
5. Handle interrupted downloads with resume capability if possible
### Security Considerations
1. Use HTTPS for all API calls in production
2. Don't store sensitive files for extended periods
3. Implement proper error messages without exposing server details
4. Sanitize all user inputs
5. Handle session timeouts appropriately
## Testing Requirements
1. Test with various file types and sizes
2. Verify all error scenarios
3. Test network condition variations:
- Slow network
- Intermittent connectivity
- Network switches (WiFi to Cellular)
4. Test concurrent uploads/downloads
5. Verify proper cleanup of temporary files
## Sample Status Codes
- 200: Success
- 400: Bad Request (invalid parameters)
- 404: Not Found (invalid code or expired file)
- 413: Payload Too Large (file size exceeded)
- 500: Server Error
## Rate Limiting
- Maximum 10 requests per minute per IP
- Implement exponential backoff for retries
## Migration Notes
If upgrading from previous versions:
1. Update API endpoint URLs
2. Implement new error handling
3. Update file size limits
4. Add support for download codes
5. Remove old URL-based download logic