API Джерси в Java для потоковой передачи файла входных данных в другой API без сохранения временных данных - PullRequest
0 голосов
/ 23 мая 2019

Я создал API с Джерси, этот API получает файл от клиента и передает его в другой API (не локальный API, но это не имеет значения). Интересно, можно ли передавать полученные данные напрямую вВторой API, не пропуская конец первой части, чтобы перенести файл в удаленный API.Я уже делал такие вещи в питоне с флягой.Не совсем то же самое, запись потока ввода непосредственно в файл.Но я не нашел такого рода вещей в java с Джерси, кроме того, напрямую отправляю в API

Преимущество этого: - сокращение времени на выполнение (и блокирование времени для клиента) - сокращение необходимых ресурсов наСервер API (без временного файла)

Если у вас есть пример серверного кода для этого (и кода клиента, если это возможно)

Я пробовал использовать метод потребителей MediaType.APPLICATION_OCTET_STREAM и объект InputStreamв Яве.Но это не сработало так, как я (возможно, я использовал не так, как нужно)

    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail,
        @QueryParam("path") String path) throws IOException
    {
        Common.writeToHdfsFile(uploadedInputStream, uploadedFileLocation);

        String output = "File uploaded to : " + uploadedFileLocation;

        return Response.status(200).entity(output).build();
    }
@app.route('/upload', methods=['POST'])
def hello():
    app.logger.info('new request')

    def custom_stream_factory(total_content_length, filename, content_type, content_length=None):
        tmpfile = tempfile.NamedTemporaryFile('wb+', prefix='flaskapp')
        print("start receiving file ... filename => " + str(tmpfile.name))
        return tmpfile

    stream, form, files = werkzeug.formparser.parse_form_data(flask.request.environ,
                                                              stream_factory=custom_stream_factory)
    print(files.values)
    total_size = 0

    for fil in files.values():
        print(
            " ".join(["saved form name", fil.name, "submitted as", fil.filename, "to temporary file", fil.stream.name]))
        total_size += os.path.getsize(fil.stream.name)
    process = psutil.Process(os.getpid())

    return "Hello World!"

Если бы мы могли сделать это на Java, это было бы идеально, но я также могу получить некоторый опыт работы с Pythonбыло бы неплохо и для некоторых примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...