Der NanoHTTPD-Server gibt nur Dateien mit einer Größe von 226 MB frei – wie lässt sich das Problem beheben?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Der NanoHTTPD-Server gibt nur Dateien mit einer Größe von 226 MB frei – wie lässt sich das Problem beheben?

by Guest » 12 Jan 2025, 10:03

Ich verwende NanoHTTPD in meinem Android-Projekt, um Dateien über einen lokalen HTTP-Server bereitzustellen. Während der Server funktioniert, scheint die Dateigröße auf 226 MB begrenzt zu sein. Dateien, die größer als diese Größe sind, werden nicht korrekt bereitgestellt.
Hier ist der relevante Teil meines Codes:

Code: Select all

package com.example
import android.content.Context;
import android.net.Uri;
import fi.iki.elonen.NanoHTTPD;
import java.io.InputStream;

public class MyWebServer extends NanoHTTPD {

private Context context;

private Uri selectedFileUri;

public MyWebServer(int port, Context context) {
super(port);
this.context = context;
}

public void setSelectedFileUri(Uri uri) {
this.selectedFileUri = uri;
}

private String getFileName(Uri uri) {

// Implementation for extracting file name from URI

String[] projection = {android.provider.OpenableColumns.DISPLAY_NAME};

try (android.database.Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null)) {

if (cursor != null && cursor.moveToFirst()) {

return cursor.getString(cursor.getColumnIndexOrThrow(android.provider.OpenableColumns.DISPLAY_NAME));
}
}

return "unknown_file";
}

private String getMimeType(Uri uri) {

// Implementation for extracting MIME type from URI

String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(uri.toString());

return android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}

@Override
public Response serve(IHTTPSession session) {

if (selectedFileUri == null) {

return newFixedLengthResponse("No file selected!");
}

if (session.getUri().equals("/download")) {

// Serve the selected file
try {

String fileName = getFileName(selectedFileUri);
String mimeType = getMimeType(selectedFileUri);
InputStream inputStream = context.getContentResolver().openInputStream(selectedFileUri);

if (inputStream == null) {
return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, "text/plain", "Failed to open file.");
}

Response response = newFixedLengthResponse(Response.Status.OK, mimeType, inputStream, inputStream.available());

response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

return response;

} catch (Exception e) {

return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, "text/plain", "Error: " + e.getMessage());
}
}

// Serve the HTML page with a download button
String fileName = getFileName(selectedFileUri);

return newFixedLengthResponse(
"" +
"" +
"Download File: " + fileName + "" +
"[url=\]Download[/url]" +
"" +
"");
}
}
Ich habe Folgendes versucht, um das Problem zu beheben:
  • Überprüfte Dateigröße: Bestätigt, dass fileToServe.length () gibt korrekt die tatsächliche Dateigröße zurück.
  • Pufferung: Es wurde mit dem Hinzufügen von Puffern oder dem Ändern von Eingabeströmen experimentiert.
  • Debugging: Überprüft, ob kleinere Dateien einwandfrei funktionieren, aber jede Datei, die größer als 226 MB ist, wird nicht korrekt bereitgestellt.
Ich habe erwartet, dass der Server Dateien jeder Größe bereitstellen kann (im Rahmen der Ressourcen des Geräts).
Entwicklungsumgebung:
  • Android SDK-Version: API 24 (Android 7.0 Nougat)
  • NanoHTTPD Version: 2.3.1
  • Sprache: Java
Hat jemand anderes ein ähnliches Problem mit NanoHTTPD gehabt? Wie kann ich den Code oder die Konfiguration ändern, um die Bereitstellung größerer Dateien zu unterstützen?

Top