Динамически хранить и получать доступ к файлу через URL - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь создать файл канала для публикации sh в Facebook. Им требуется URL-адрес, чтобы попасть и получить файл. Мне было интересно, какой подход я должен использовать, чтобы сохранить и сделать файл общедоступным для Facebook.

Мой первый подход заключался в том, чтобы сохранить файл CSV в папке publi c с именем «feed», расположенной в webapp / feed / {filename.csv}, однако я пришел к выводу, что с помощью Faces.getExternalContext().getRealPath("/") - не лучший подход, поскольку файлы теряются при повторном развертывании или перезапуске сервера. Этот подход, кажется, работает только в моей локальной среде, а не AWS.

Мой следующий подход заключался в том, чтобы хранить отдельные файлы каналов каждого пользователя в моей базе данных и извлекать их по запросу, но я не смог найти информацию о том, возможно ли / как это возможно. Меня смущает не то, как получить файл, а то, как создать страницу, которая сделает его доступным для извлечения Facebook.

Короче говоря, я хочу взять созданный мной CSV-файл и сделать его общедоступным через URL-адрес, который Facebook может идентифицировать и захватить. В настоящее время я ищу файловую систему Amazon Elasti c, чтобы решить эту проблему. Это правильный подход или есть более простое решение.

Спасибо, что прочитали.

1 Ответ

0 голосов
/ 19 июня 2020

Этот ответ получает файл канала из базы данных определенных c пользователей. Файлы каналов - это просто файл CSV, содержащий информацию о продукте со значениями, требуемыми Facebook. Когда поток данных запланирован с Facebook, они попадают по заданному URL-адресу (например, https://www.yourwebsite.com/feed.xhtml?user= {some_user} ). Этот URL-адрес должен отправить файл запрашивающей стороне. Этот файл x html и класс java делают именно это. Имейте в виду, что в этом примере не показано, как файлы создаются, только то, как они возвращаются.

feed.x html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:adm="http://github.com/adminfaces">
    
    <h:body>
        <!-- Meta Data -->
        <f:metadata>

            <f:viewParam name="user" value="#{feed.userId}"
                converter="javax.faces.Long" />
            
            <f:event type="preRenderView" listener="#{feed.init}" />

        </f:metadata>
    
    </h:body>
    
</html>

Подача. java

package me.walkerworks.bean;

import java.io.IOException;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

import org.omnifaces.util.Faces;
import me.walkerworks.security.DataConnect;


/**
 * 
 * @author Thomas Walker 6/18/2020
 *
 */
@Named
@RequestScoped
public class Feed implements Serializable {

    private static final long serialVersionUID = 1L;
    private String userId;
    
    private int feedId;
    private byte[] content;

    /**
     * Initialized Bean
     * 
     * @throws ClassNotFoundException
     * @throws SQLException
     * @throws IOException 
     */
    public void init() throws ClassNotFoundException, SQLException, IOException {

        if (userId != null) {

            // Connection var
            Connection connection = null;

            // Loading jdbc driver for mysql
            Class.forName("com.mysql.cj.jdbc.Driver");

            // Getting connection from products table
            connection = DataConnect.getConnection("user" + userId);

            // Prepare Statement
            PreparedStatement preparedStatement = connection

                    .prepareStatement("SELECT * FROM feeds");

            // Execute statement and get result
            ResultSet resultSet = preparedStatement.executeQuery();

            // If there is data to load from db
            if (resultSet.next()) {

                // Set feed id
                feedId = resultSet.getInt("id");
                

                // Get and store the file in class
                if (resultSet.getBytes("content") != null) {

                    // Get long blob 
                    content = resultSet.getBytes("content");

                }
            }

            // Closing connections
            resultSet.close();
            preparedStatement.close();
            DataConnect.close(connection);
            
            // If content isn't null
            if (content != null) {
                
                // Send file
                Faces.sendFile(content, feedId + ".csv", true);
                
            }           
        }
    }

    /**
     * @return the userId
     */
    public String getUserId() {
        return userId;
    }

    /**
     * @param userId the userId to set
     */
    public void setUserId(String userId) {
        this.userId = userId;
    }

    /**
     * @return the feedId
     */
    public int getFeedId() {
        return feedId;
    }

    /**
     * @param feedId the feedId to set
     */
    public void setFeedId(int feedId) {
        this.feedId = feedId;
    }

    /**
     * @return the content
     */
    public byte[] getContent() {
        return content;
    }

    /**
     * @param content the content to set
     */
    public void setContent(byte[] content) {
        this.content = content;
    }

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